【问题标题】:Which collection should I use?我应该使用哪个系列?
【发布时间】:2012-11-06 01:34:40
【问题描述】:

我正在寻找适合我当前情况的理想系列。

我只需要一个List<string>,它可以为每个索引允许两个条目。类似于Dictionary,但是我不需要键和值,并且想通过索引遍历它。我能想到的最好的集合是多维数组,但是我想指定每个元素可以存储两个项目,但是元素的数量可以是无限的。

我应该使用哪个集合?

编辑:另外,我想过使用List<List<string>>,但是由于每个索引只需要两个元素,我认为在列表的每个索引位置存储一个列表会很浪费.

【问题讨论】:

  • 如果您使用它来按索引进行迭代,那么元组就可以了。如果要在 HashSet Tuple 中使用它,则不是一个好的选择,因为它会产生大量的哈希冲突。

标签: c# .net arrays list collections


【解决方案1】:

你可以使用Tuple

检查这个:Tuple (Class)

var population = new Tuple<string, string>("New York", "Madrid");

【讨论】:

  • 我从未听说过这个系列。谢谢,我试试看
  • 如果您想要命名成员而不是 Item1Item2 等,请使用自定义类。
  • @bechm 看到 John Kenedy 的回答
  • 请记住,Tuple 仅在框架的更新版本中引入
  • 像这样使用静态辅助方法更容易:var population = Tuple.Create("New York", "Madrid");,因为使用方法您不必指定泛型参数&lt;string, string&gt;,因为它们可以被推断出来。使用 new-object 表达式,您必须像上面一样提供泛型参数。
【解决方案2】:

尝试使用类

public class MyData
{
    public string Data1 {get;set;}
    public string Data2 {get;set;}
}

var obj = List<MyData>();

【讨论】:

    【解决方案3】:

    您还可以将元组与更简单的辅助方法一起使用

    var population = Tuple.Create("New York", "Madrid")
    

    【讨论】:

      【解决方案4】:

      您也可以尝试使用锯齿状数组(数组数组):

       object[] row1 = new object[2]; // create a one dimensional array
       for (int i = 1; i < 2; i++)
       {
           row1[i] = "yourValues "+i; // push your values into the array
       }
      
       object[,] multi=new object[1,2];
                  multi[0,0] = row1; // push the created array into 2dimensional array
      
      for (int j = 0; j < ((object[])(multi[0, 0])).Length; j++)
                      MessageBox.show(((object[])(row[0, 0]))[j]); // retrieve value from 
      

      带索引的多维数组。

      谢谢。

      【讨论】:

        猜你喜欢
        • 2014-10-14
        • 1970-01-01
        • 2011-10-07
        • 2012-10-21
        • 1970-01-01
        • 2016-09-28
        • 2015-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多