在Kotlin中,我如何获取数组的前n个元素

在Kotlin中,我怎样才能把这个数组的前n个元素:

val allColours = arrayOf( Pair(Color.RED, Color.WHITE), Pair(Color.RED, Color.BLACK), Pair(Color.YELLOW, Color.BLACK), Pair(Color.GREEN, Color.WHITE), Pair(Color.BLUE, Color.WHITE), Pair(Color.BLUE, Color.WHITE), Pair(Color.CYAN, Color.BLACK), Pair(Color.WHITE, Color.BLACK)) 

那么我怎样才能用pegColours填写第一对3?

 var pegColours: Array<Pair> = //??? 

我尝试allColours.take但它给了一个错误:

期待一个元素

你创建的对象的颜色常量是IntallColourstypes是Array>) ,但是你期望Array> 。 你必须做的是改变typespegColourstypes和使用:

 var pegColours: Array> = allColours.take(3).toTypedArray() 

你也必须调用toTypedArray()导致Array.take返回List而不是Array 。 或者您可以更改pegColourstypes,如下所示:

 var pegColours: List> = allColours.take(3) 

您需要指定要采取的项目的数量。

 allColours.take(3) 

对于随机数的随机索引,可以使用以下内容:

 val indexes = arrayOf(2, 4, 6) allColours.filterIndexed { index, s -> indexes.contains(index) } 

请注意,您可以为此编写一个扩展方法:

 fun  Array.filterByIndices(vararg indices: Int) = filterIndexed { index, _ -> indices.contains(index) } 

或者,如果索引是连续的,则可以使用slice:

 allColours.slice(1..3) 

我知道你已经提出了take的用法,但是可选的范围和一个简单的map也有助于编写惯用代码,如下所示:

 var pegColours = (0 until 3).map { allColours[it] }.toTypedArray() 

你非常接近:)

 val allColours = arrayOf("red", "blue", "green") kotlin.io.println(allColours.take(2)) 

会给你前两个元素[“红”,“蓝”]

您必须指定要从数组中获取的元素的数量