在Kotlin中,如何获取数组的前n个元素
在Kotlin中,如何获取此数组的前n个元素:在Kotlin中,如何获取数组的前n个元素,kotlin,Kotlin,在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
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对填充pegcolors
var pegColours: Array<Pair<Color,Color>> = //???
var-peggolors:Array=/???
我尝试了allcolors.take
,但出现了一个错误:
需要一个元素
您需要指定要获取的项目数
allColours.take(3)
对于随机数目的随机索引,可以使用以下方法:
val indexes = arrayOf(2, 4, 6)
allColours.filterIndexed { index, s -> indexes.contains(index) }
var pegColours: List<Pair<Int, Int>> = allColours.take(3)
请注意,您可以为此编写扩展方法:
fun <T> Array<T>.filterByIndices(vararg indices: Int) = filterIndexed { index, _ -> indices.contains(index) }
你非常接近:)
将为您提供前两个元素[“红色”、“蓝色”]
您必须指定要从数组中获取的元素数代码中存在的问题是,您创建的颜色常量对是
Int
s(allcolors
具有类型array)
,但您需要array
。您需要做的是更改类型pegcolors
类型并使用take
:
var pegColours: Array<Pair<Int, Int>> = allColours.take(3).toTypedArray()
我知道您已经建议使用
take
,但是或者范围和简单的映射也有助于编写惯用代码,如下所示:
var pegColours = (0 until 3)
.map { allColours[it] }
.toTypedArray()
使用allcolors.take(3)
@Héctor 2*-01 2但如果我想拿下一对为例:2 4 6?@Morozov.filterIndexed{index,->index%2==0&&index!=0}。take(3)
应该是allcolors.slice(0..2)
实际上相当不错!这比接管有什么好处?如果一个是“取3”,那么为什么要创建更多的代码来读取和解析呢。如果你真的想将元素“映射”到其他元素,我认为你的例子很有价值。如果这是您的用例,我建议添加它作为注释,因为我正在考虑否决这个答案。这没有错,但我建议不要创建一个范围,而不要直接进行“拍摄”贴图。谢谢。正是这种小功能让我们的生活变得如此轻松
var pegColours: List<Pair<Int, Int>> = allColours.take(3)
var pegColours = (0 until 3)
.map { allColours[it] }
.toTypedArray()