Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Kotlin中,如何获取数组的前n个元素_Kotlin - Fatal编程技术网

在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

在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对填充
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()