【问题标题】:Specifying a size when declaring a List of Arrays声明数组列表时指定大小
【发布时间】:2015-01-14 15:13:15
【问题描述】:

正如问题所述,是否有其他方法可以做到这一点?:

decimal[] decimal_array = new decimal[12];
List<decimal> decimal_list = new List<decimal>(3);

// want to combine the two
List<decimal[]> decimal_list_array = new List<decimal[12]>(3); // doesn't compile

我知道这行不通,因为“十进制[12]”不是一种类型,但是在我声明它时设置结构的大小会很简洁,而不必写@987654322 @ 很多次。

我希望能够主要通过列表中对象的每个实例上的索引进行操作,但除此之外我不关心中实际对象的顺序> 列表。

编辑:结构的初始大小在声明时将是已知的,但这只是List&lt;decimal[]&gt; 的最小实例数

【问题讨论】:

  • 我认为这就是提问的重点。另外,我更新了问题以反映虽然 decimal[] 数组大小是静态的,但 List 是可变的。声明大小只是最小值。

标签: c# .net arrays list


【解决方案1】:

您可以使用LINQ

var list = Enumerable.Range(0, 3).Select(x => new decimal[12]).ToList();

【讨论】:

    【解决方案2】:

    如果您想限制内部数组和外部列表的大小,那么您可能需要的是multi-dimensional array

    decimal[,] decimalListArray = new decimal[3,12];
    

    正如您所说,new List&lt;decimal[12]&gt;(3) 不起作用,因为 decimal[12] 不是一种类型,但即使它确实如此,您实际上也没有将列表限制为具有 3 个元素。 3 将是初始容量,但如果添加第四个项目,容量将会增长。根据定义,列表是动态的。

    【讨论】:

    • 没关系。我确实没有提到这个结构在声明大小和结束大小上都不是静态的。我会更新问题。
    • @glace 啊,看起来确实是你在暗示的。 Selman22 的答案就是:)
    • 这正是我想要的。不过感谢您的意见,我没有指定结构的性质是我的错误。
    【解决方案3】:

    您可以执行以下操作:

    decimal[] dec_array = new decimal[12] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
    List<decimal> dec_list = new List<decimal>(3) { 12, 13, 14 };
    
    List<decimal> listComb = dec_array.ToList().Union(dec_list).ToList();
    //you can change order by doing so: dec_list.Union(dec_array.ToList()).ToList();
    

    别忘了“使用 System.Linq;”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多