【问题标题】:Append List of array to an array and repeat this in kotlin将数组列表附加到数组并在 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]]

【问题讨论】:

    标签: arrays loops kotlin append


    【解决方案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() 三次,每次都打印相同的结果。你想达到什么目的?
      猜你喜欢
      • 2018-08-24
      • 2019-05-30
      • 1970-01-01
      • 2021-02-21
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      相关资源
      最近更新 更多