21

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

4

3 回答 3

30

你没有。根据定义, aHashSet未排序。

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

于 2012-05-08T09:16:05.307 回答
16

您可以使用该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
        */

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

于 2012-05-08T09:17:31.600 回答
15

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

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

SortedSet类在.NET 3.5 中不可用。

于 2012-05-08T09:39:33.847 回答