在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
但它给了一个错误:
期待一个元素
你创建的对象的颜色常量是Int
( allColours
types是Array
,但是你期望Array
。 你必须做的是改变typespegColours
types和使用:
var pegColours: Array> = allColours.take(3).toTypedArray()
你也必须调用toTypedArray()
导致Array.take
返回List
而不是Array
。 或者您可以更改pegColours
types,如下所示:
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))
会给你前两个元素[“红”,“蓝”]
您必须指定要从数组中获取的元素的数量