在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))
Run Code Online (Sandbox Code Playgroud)
那么如何填写pegColours第一个说3对呢?
var pegColours: Array<Pair<Color,Color>> = //???
Run Code Online (Sandbox Code Playgroud)
我试过了,allColours.take但它给出了一个错误:
期待一个元素
您使用颜色常量创建的代码的问题是Ints(allColours具有类型Array<Pair<Int, Int>>),但您期望Array<Pair<Color, Color>>.您需要做的是更改类型pegColours类型并使用take:
var pegColours: Array<Pair<Int, Int>> = allColours.take(3).toTypedArray()
Run Code Online (Sandbox Code Playgroud)
你还必须调用toTypedArray()原因Array.take返回List而不是Array.或者您可以更改pegColours类型如下:
var pegColours: List<Pair<Int, Int>> = allColours.take(3)
Run Code Online (Sandbox Code Playgroud)
我知道你已经建议使用take, 但或者range 和一个简单的map也有助于编写惯用代码,如下所示:
var pegColours = (0 until 3)
.map { allColours[it] }
.toTypedArray()
Run Code Online (Sandbox Code Playgroud)
您需要指定要拍摄的项目数.
allColours.take(3)
Run Code Online (Sandbox Code Playgroud)
对于随机数的随机索引,您可以使用以下内容:
val indexes = arrayOf(2, 4, 6)
allColours.filterIndexed { index, s -> indexes.contains(index) }
Run Code Online (Sandbox Code Playgroud)
请注意,您可以为此编写扩展方法:
fun <T> Array<T>.filterByIndices(vararg indices: Int) = filterIndexed { index, _ -> indices.contains(index) }
Run Code Online (Sandbox Code Playgroud)
或者,如果索引是连续的,则可以使用slice:
allColours.slice(1..3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6443 次 |
| 最近记录: |