【问题标题】:C# data structure: What type of collection should I use?C# 数据结构:我应该使用什么类型的集合?
【发布时间】:2011-09-21 16:33:46
【问题描述】:

对于集合中的每个项目,我需要一个短字符串和几个 int16 字段。我想使用字符串字段遍历集合(这意味着我不想使用数字索引进行迭代)。 收藏品最多约10件。感谢您的任何建议。

【问题讨论】:

标签: c# data-structures collections


【解决方案1】:

我会使用Dictionary,这样您就可以使用任意键(在您的情况下为string)对其进行索引。

【讨论】:

    【解决方案2】:

    我认为Dictionary<string, List<int>> 应该可以满足您的需求。

    Dictionary<string, List<int>> dictionary = new Dictionary<string, List<int>>();
    dictionary.Add("key", new List<int>{1,2,3,4});
    ...
    

    【讨论】:

      【解决方案3】:

      如果您的意思是 迭代 循环;那么这真的没关系,因为所有集合都支持foreach

       foreach (var item in collection) { ... }
      

      但是,如果您的意思是 迭代 作为索引,那么 Dictionary 应该可以完成这项工作。

       class SomeFields { public int a; public int b; ... }
      
       var collection = new Dictionary<string, SomeFields>();
       collection.Add("name", new SomeFields() { a = 1, b = 2 });
      
       var fields = collection["name"];
      

      【讨论】:

        【解决方案4】:

        如果集合中的项目很小“10 项或更少”,则使用ListDictionary 会更好地提高性能,如果您不确定元素数量或者将来元素数量可能会增加,请使用@987654322 @。

        请注意,HybridDictionary 机制是在集合较小时在内部使用 ListDictionary,然后在集合变大时切换到 Hashtable。

        【讨论】:

        • 你的两个建议都是非泛型的,现在应该被认为已经过时了,除非你有一个真的很好的理由来使用它们而不是自 .NET2 以来添加的泛型集合来了。
        • 我也不使用它们,但这是你知道的作业,在 C# 2.0 基础考试“70-636”中,这仍然是答案...
        【解决方案5】:

        如果您使用 .NET 4 并且“少数 int16”始终是相同数量的值,您可能还需要将 Tuple 类视为字典中的值:

        var map = new Dictionary<string, Tuple<Int16, Int16, Int16>>();
        map["Foo"] = Tuple.Create(1, 2, 3);
        
        var values = map["Foo"];
        Console.WriteLine("{0} {1} {2}", value.Item1, value.Item2, value.Item3);
        

        【讨论】:

          猜你喜欢
          • 2011-10-24
          • 1970-01-01
          • 1970-01-01
          • 2011-12-12
          • 2013-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多