在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))
那么如何用{3}对第一个填充pegColours
?
var pegColours: Array<Pair<Color,Color>> = //???
我尝试了allColours.take
,但却出错了:
期待元素
答案 0 :(得分:7)
您使用Int
s(allColours
的颜色常量创建对的代码的问题具有Array<Pair<Int, Int>>)
类型,但您期望Array<Pair<Color, Color>>
。您需要什么do是更改类型pegColours
类型并使用take
:
var pegColours: Array<Pair<Int, Int>> = allColours.take(3).toTypedArray()
此外,您必须致电toTypedArray()
因为Array.take
返回List
而不是Array
。或者您可以更改pegColours
类型,如下所示:
var pegColours: List<Pair<Int, Int>> = allColours.take(3)
答案 1 :(得分:6)
您需要指定要拍摄的项目数。
allColours.take(3)
对于随机数的随机索引,您可以使用以下内容:
val indexes = arrayOf(2, 4, 6)
allColours.filterIndexed { index, s -> indexes.contains(index) }
请注意,您可以为此编写扩展方法:
fun <T> Array<T>.filterByIndices(vararg indices: Int) = filterIndexed { index, _ -> indices.contains(index) }
或者,如果索引是连续的,则可以使用slice:
allColours.slice(1..3)
答案 2 :(得分:3)
我知道您已经提议使用take
,但或范围和简单的map
也有助于编写惯用代码,如下所示:
var pegColours = (0 until 3).map { allColours[it] }.toTypedArray()
答案 3 :(得分:1)
你非常接近:)
val allColours = arrayOf("red", "blue", "green")
kotlin.io.println(allColours.take(2))
会给你前两个元素[“红色”,“蓝色”]
您必须指定要从数组中获取的元素数