【问题标题】:Multidimensional-array in CeylonCeylon 中的多维数组
【发布时间】:2018-03-24 17:03:02
【问题描述】:

我想在 Ceylon 使用多维数组工作。这是在锡兰计划的吗?如果是,我该如何申报?

我想在 Ceylon 中使用这个结构,如下面的 Java 所示:

int x = 5;
int y = 5;

String[][] myStringArray = new String [x][y];

myStringArray[2][2] = "a string";

【问题讨论】:

    标签: arrays multidimensional-array ceylon


    【解决方案1】:

    首先,考虑您是否真的需要数组(即具有固定长度和可修改元素的东西),或者列表(或列表的列表)或映射是否更好。虽然从你的例子来看,你似乎需要修改。

    在 JVM 中,“多维”数组只是数组的数组。

    在 Java 中,new String[y] 创建一个填充有 null 条目的数组,这在 Ceylon 中是 String 类型的不允许值。因此,您可以拥有一个String? 数组(允许null),或者使用其他值预先填充数组,例如使用Array.ofSize(...):

    Array.ofSize(y, "hello")
    

    同样适用于数组数组。我们可以这样做:

    value myStringArray = Array.ofSize(x, Array.ofSize(y, "hello"));
    

    虽然这将在二维数组的每个“行”中具有相同的数组,但这不是我们想要的(因为替换 myStringArray[2][2] 会将所有条目替换为 2 作为第二个坐标)。这里的另一个 Array 构造函数很有用,它需要一个可迭代对象:

    value myStringArray = Array({ Array.ofSize(y, "hello") }.repeat(x));
    

    这利用了可迭代枚举懒惰地评估其参数这一事实,因此数组构造函数将获得 x 个不同的元素。

    【讨论】:

      【解决方案2】:

      我喜欢 Paulo 的回答,但这是另一种方法,它允许我们使用推导来填充 2D 数组:

      //the size of the square 2D array
      value n = 5;
      
      //create it using a nested comprehension
      value arr = Array { 
          for (i in 1..n-1) Array { 
              for (j in 0..n-1) 
                  i==j then 1 else 0 
          }
      };
      
      //display it
      for (row in arr) {
          printAll(row);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        • 1970-01-01
        相关资源
        最近更新 更多