【问题标题】:How can I create a 2D ArrayList in Kotlin?如何在 Kotlin 中创建 2D ArrayList?
【发布时间】:2020-08-12 20:31:37
【问题描述】:

我有以下示例数据 -->

物理学 --> 93
化学 --> 72
数学 --> 84
生物学 --> 67
英语 --> 78



我想将此数据存储在ArrayList 中(因为我想让它调整大小)

那我想在控制台打印出来。

我该怎么做?

【问题讨论】:

    标签: kotlin arraylist multidimensional-array


    【解决方案1】:

    正如 Tenfour04 所指出的,这是一个X-Y problem,因为最合适的数据结构根本不是列表,而是地图:

    val marks = mapOf("Physics" to 93, "Chemistry" to 72,
                      "Mathematics" to 84, "Biology" to 67,
                      "English" to 78)
    
    for ((subject, mark) in marks)
        println("Subject --> $subject, Mark --> $mark")
    

    除了看起来更自然、更简洁的代码之外,这还可以确保您不会两次存储相同的主题,并且每个主题都只有一个标记。 (列表无法表达或强制执行这些条件。)它提供了正确的类型(String 主题和 Int 标记,您可以根据需要对其进行算术运算,例如计算平均值) .而且查找特定主题的效率要高得多。

    而且,与列表一样,地图可以调整大小:如果您将其设为可变地图,那么您可以根据需要添加、更新和删除项目。

    关于列表:Kotlin 没有多维列表或数组。相反,它有 of 个列表,这是一个粗略的近似,但设置和更新更复杂,效率也稍低。在某些情况下肯定需要它们——但这不是其中之一!

    【讨论】:

      【解决方案2】:

      最好的方法是创建一个ArrayListArrayList

      外部ArrayList 的每个元素本身都是大小为2 的ArrayList,存储SubjectMarks

      fun main() {
          val arrayList: ArrayList<ArrayList<Any>> = arrayListOf(arrayListOf("Biology", 74),
                  arrayListOf("Chemistry", 49), arrayListOf("Physics", 92), arrayListOf("Mathematics", 82))
          
          for (element in arrayList) {
              println("Subject --> ${element.get(0)}, Marks --> ${element.get(1)}")
          }
      }
      

      控制台输出 -->

      Subject --> Biology, Marks --> 74
      Subject --> Chemistry, Marks --> 49
      Subject --> Physics, Marks --> 92
      Subject --> Mathematics, Marks --> 82
      
      

      【讨论】:

      • 这是一个糟糕的方法。使用 2D 列表而不是 Map 是不必要的复杂性,并且您会丢失类型信息。
      • @Tenfour04 这仍然表明可以创建 2D 列表。我在这个网站上搜索了一个小时,但没有发现任何问题。所以我觉得为了完整起见,这个问题需要存在
      猜你喜欢
      • 1970-01-01
      • 2016-08-04
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多