对Hashset .Net 3.5进行排序

ViV*_*ViV 13 c# .net-3.5

如何HashSet<string>在c#.Net 3.5中排序?

Cod*_*ray 24

你没有.根据定义,a HashSet未排序.

如果你想要一个排序的哈希集,那么你应该使用一个SortedSet.它所公开的方法本质上是由它们提供的方法的超集HashSet,包括对其内容进行排序的能力.

  • SortedSet在3.5中不可用 (6认同)
  • 请注意,SortedSet将不包含使用HashSet时所具有的不同值,但是在使用适当的扩展方法构造时可以加载Distinct值. (2认同)
  • @ericosg 我不明白你的评论。 (2认同)
  • 抱歉,这里的关键词是 Set,而不是 hash。SortedSet 也没有重复项。“SortedSet&lt;T&gt; 在插入和删除元素时保持排序顺序,而不影响性能。不允许使用重复的元素。” (2认同)

eri*_*osg 14

您可以使用该OrderBy方法,IComparer(即http://msdn.microsoft.com/en-us/library/bb549422.aspx)或使用您的比较器内联一些lambda(我通常使用谓词进行比较,如下所示) ).

按链接查看:

        class Pet
        {
            public string Name { get; set; }
            public int Age { get; set; }
        }

        public static void OrderByEx1()
        {
            Pet[] pets = { new Pet { Name="Barley", Age=8 },
                           new Pet { Name="Boots", Age=4 },
                           new Pet { Name="Whiskers", Age=1 } };

            IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);

            foreach (Pet pet in query)
            {
                Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
            }
        }

        /*
         This code produces the following output:

         Whiskers - 1
         Boots - 4
         Barley - 8
        */
Run Code Online (Sandbox Code Playgroud)

阅读更多:http://msdn.microsoft.com/en-us/library/bb534966.aspx

  • 这显然不会对hashset本身进行排序,而是返回hashset的排序视图. (7认同)
  • 是的,HashSet中包含的值没有排序,但可以在排序视图(或副本)中访问. (3认同)

小智 10

HashSet <string>未按设计排序.如果你想对项目进行一次排序(〜不经常),那么你可以使用OrderBy LINQ方法(因为HashSet <string>实现IEnumerable <string>):hs.OrderBy(s => s);

如果您需要排序的hashset,那么您可以使用SortedDictionary类 - 只需使用一些虚拟类型(即bool)作为TValue泛型参数.

SortedSet的类不在.NET 3.5可用.