将数组列表附加到数组并在 kotlin 中重复此操作

Posted

技术标签:

【中文标题】将数组列表附加到数组并在 kotlin 中重复此操作【英文标题】:Append List of array to an array and repeat this in kotlin 【发布时间】:2022-01-21 02:07:36 【问题描述】:

我似乎找不到合适的解决方案。试图将数组列表添加到另一个数组。以我的 Python 背景,这很容易完成,但在 Kotlin 中却不是。

val extra = arrayOf(7,7,7)

fun containerArray() 

    val even = arrayOf(2, 4, 6)

    val odd = arrayOf(1, 3, 5)

    val arr1 = arrayOf(even, odd)

    val arr2 = arrayOf(*arr1, extra)



    print(arr2.contentDeepToString())

 

 fun main() 

     for (i in 1..3) 

        containerArray() 

    

 

执行上述代码时,我收到...

[[2, 4, 6], [1, 3, 5], [7, 7, 7]][[2, 4, 6], [1, 3, 5], [7,7, 7]][... 我想要实现的是这个....

[ [2, 4, 6], [1, 3, 5], [7, 7, 7], [7, 7, 7], [7, 7, 7]]

【问题讨论】:

【参考方案1】:

要将事物添加到事物数组并生成新数组,请使用plusElement

val arr2 = arr1.plusElement(extra)

这不仅适用于数组,也适用于任何Iterables,即Lists、Sets 等。

【讨论】:

【参考方案2】:

你明白为什么你会得到这个结果吗? arrayOf(items) 创建一个包装这些项目的新数组,因此arrayOf(even, odd) 是一个包含两个数组的数组。然后创建另一个数组,包含该数组数组和另一个数组。您正在嵌套它们

Sweeper 的答案可能是您想要的,但是有很多方法可以组合集合、展平序列等。就像您可以做的一件事是使用 *operator(“扩展运算符”)来“解包”你的数组,所以你得到的项目,而不是:

   // unpack arr1 from an array of arrays, into just those arrays
   // equivalent to arrayOf([2, 4, 6], [1, 3, 5], extra)
   val arr2 = arrayOf(*arr1, extra)

   print(arr2.contentDeepToString())
   >> [[2, 4, 6], [1, 3, 5], [7, 7, 7]]

还有flatMapflatten 等 - 最佳选择取决于您在做什么!


当你说你想要这个时:

[2, 4, 6], [1, 3, 5], [7, 7, 7]

这只是一堆值,不包含在任何东西中,所以我们假设你想要这个:

[[2, 4, 6], [1, 3, 5], [7, 7, 7]]

它们保存在一个数组中(或者它可以是一个列表)。您可以使用扩展运算符将其解压缩成一堆值,但您所能做的就是将其作为可变数量的参数传递给函数(这就是 arrayOf 中发生的事情)

【讨论】:

伙计们感谢您的建议。这两个答案都添加到我的知识中。 # cactustictacs 你的问题是的,我想实现一个嵌套数组 [[2, 4, 6], [1, 3, 5], [7, 7, 7]],而不是使用和索引来选择一个数组列表。但是,在我的场景中,我使用 for 循环向该数组添加一个新列表,但它不像我预期的那样工作。 @PSoll 如果你有你的 container 数组(外部)和 item 数组[2, 4, 6] 等),那么你需要创建您的容器,可能从包含的几个项目开始 - arrayOf()arrayOf(even, odd)。然后只需添加项目数组(使用其他答案中的一种 plus 方法)是最简单的方法。 arr1 += extra 工作! @PSoll 需要注意的一点是,Kotlin 鼓励 immutable 集合,因此有很多函数不会更改原始集合,它们使用更改,然后返回。 plusElement 是一,所以arr1.plusElement(extra) 不会改变arr1,它只会生成一个添加的副本。无论如何,这对于数组都是必要的——它们是固定长度的,如果你想“添加”到一个,你需要创建一个新数组并将其分配给变量。您通常会改用 mutableList - 如果出于某种原因您真的想要一个数组,您可以在最后调用 toTypedArray()【参考方案3】:

我假设你想得到以下数组:

[[2, 4, 6], [1, 3, 5], [7, 7, 7]]

在 Kotlin 中有一个覆盖 +(加号)运算符用于 Arrays,您可以使用它来添加数组:

val arr2 = arr1 + extra

结果数组 arr2 将包含原始数组 arr1 的所有元素,然后包含数组 extra 的所有元素。

另外:

您可以将另一个数组添加到arr2

val anotherArray = arrayOf(5, 5, 5)
val arr3 = arr2 + anotherArray
// result: [[2, 4, 6], [1, 3, 5], [7, 7, 7], [5, 5, 5]]

如果你想使用同一个数组arr2来存储元素,你可以用var修饰符创建它:

var arr2 = arr1 + extra
arr2 += arrayOf(5, 5, 5)

您尝试使用循环实现的目标有多种不同的方式,例如:

val even = arrayOf(2, 4, 6)
val odd = arrayOf(1, 3, 5)
val extra = arrayOf(7,7,7)

var arr1 = arrayOf(even, odd)

for (i in 1..3) 
    arr1 += extra

arr1 将包含下一个元素:[[2, 4, 6], [1, 3, 5], [7, 7, 7], [7, 7, 7], [7, 7, 7]]

【讨论】:

使用+ 操作符你想得到什么结果?这应该可以工作,结果数组应该是[[2, 4, 6], [1, 3, 5], [7, 7, 7]]。我猜你错误地描述了你想在你的问题中得到的结果。 Sergey 和@cactustictacs 绝对正确。该代码示例有效,但如果我尝试使用循环将其他数组添加到 arr2,它只会替换数组的最后一个元素。我没有尝试过 mutableList 但我认为在这种情况下这是正确的方法。所以这是我寻找的结果 [[2, 4, 6], [1, 3, 5], [7, 7, 7]] 并在我的循环之后向列表中添加一个额外的元素,如 [[2, 4 , 6], [1, 3, 5], [7, 7, 7], [5,5,5]] 等等。 @PSoll 我在回答中添加了一些附加信息。我不太明白您如何尝试在循环中添加元素,很高兴看到一些示例(您可以编辑您的问题)。 在这里找到代码:play.kotlinlang.org/… 所以你调用containerArray() 三次,每次都打印相同的结果。你想达到什么目的?

以上是关于将数组列表附加到数组并在 kotlin 中重复此操作的主要内容,如果未能解决你的问题,请参考以下文章

Python - 如何创建一个空的numpy数组并附加到它,如列表[重复]

将项目附加到 PyMongo 中的 MongoDB 文档数组而不重新插入

如何将 gekko 对象插入/附加到现有列表/数组?

将一个 numpy 数组附加到一个列表 - 奇怪的事情

Javascript承诺链与重复逻辑附加到同一项目数组中。

选择 UITableView 中的所有行,并在数组中附加标签