【问题标题】:Best collection for data in C# .NETC# .NET 中数据的最佳集合
【发布时间】:2011-10-10 19:25:59
【问题描述】:

我必须存储这些数据:

 "AL" => 1997
 "AK" => 1977
 ...
 "WY" => 1997

将其存储在 .NET 中的最佳方式是什么?我应该只使用数组、arrayList 还是其他集合?

【问题讨论】:

  • 您为任务选择的集合将取决于所需的数据访问方法...
  • 也可以是enum!

标签: c# .net arrays collections


【解决方案1】:

试试System.Collections.Generic.Dictionary<TKey, TValue>

你会这样使用它:

var values = new Dictionary<string, int>
{
    { "AL", 1997 },
    { "AK", 1977 },
    ...
    { "WY", 1997 },
};

Console.WriteLine(values["AK"]);  // Writes 1977

【讨论】:

    【解决方案2】:

    这是一个典型的 key -> value 存储问题,所以你最好的选择是

    SortedList<string, int> 
    

    Dictionary<string, int>     
    

    因为这里的问题是哪个是最合适的,所以你去:

    在两者之间进行选择取决于您的使用情况。如果您将一次全部实例化列表,那么 SortedList 就是您的答案,因为它使用更少的内存并且比 Dictionary (SortedDictionary) 快一点。如果您打算插入或删除项目,那么 Dictionary 应该是您的选择,因为它在那里更快一些。

    Source, originally from MSDN

    【讨论】:

    • 你能告诉我们这两者之间的区别吗?在这种情况下你会选择哪一个?
    【解决方案3】:

    首先,根据经验,您不应该对已知值使用非泛型集合类型,除非您使用的是之前的 .NET 版本2.0

    对于唯一键

    Dictionary<string,int32> or Dictionary<string,string>
    

    对于非唯一键

    List<KeyValuePair<string,int32>> or List<KeyValuePair<string,string>>
    

    【讨论】:

    • 不应该是“.NET 1.x”吗?
    • “从不”是相当强大的语言。你能说出你的陈述的理由吗?
    • @DOK,从不是一个强词。让我们说经验法则。但是,使用非泛型集合类型而不是泛型集合类型的唯一好处是您的库在内存中的大小。当使用新的泛型参数组合初始化新的泛型类型时,会生成新类型并将其存储在内存中的程序集中。因此,每种使用的类型都需要(一点点)更多的内存。通过使用非泛型集合,您一次只能在内存中拥有一种(该类型的)集合类型,从而减少内存使用量。这是我能想到的唯一例外。
    【解决方案4】:

    如果您的密钥是唯一的,请使用 Dictionary&lt;string, int&gt;

    【讨论】:

      【解决方案5】:

      如果您需要从两位数字符串中查找日期,您可以使用Dictionary&lt;string, int&gt; from System.Collections.Generic

      【讨论】:

        【解决方案6】:

        Dictionary&lt;string,Int32&gt; 似乎是考虑到限制细节的最佳选择

        【讨论】:

          【解决方案7】:

          这取决于,一些选项:

          • 作为包含整个段落的字符串(字符数组)
          • 作为数组,List 或每一行的集合
          • 作为Dictionary&lt;string, int&gt;,假设“AL”、“AK”等是唯一的,并且您希望根据左侧查找右侧
          • DataSet

          --> 这完全取决于您对数据的处理方式、约束条件和要求。给我们一些更多的信息,你会得到一个非常详细的答案。

          例如:如果您尝试将该数据存储为一些文本以显示在网页上,则为第一个选项。第二个选项作为解析用户输入或从文件导入的某些文本的初始部分。第三个选项,如果您在代码中构建它,或者打算在代码或对象模型中查询或以其他方式执行逻辑。如果您要往返于 ADO.NET 数据源,则为最后一个。还有更多.. 您可以使用包含 JBIG2 编码的抖动文本图像的 BinaryStream 对象。 ;)

          【讨论】:

            【解决方案8】:

            如果你希望它被排序,你可以使用SortedDictionary

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-09-03
              • 1970-01-01
              • 2016-01-28
              • 1970-01-01
              相关资源
              最近更新 更多