【问题标题】:Sort a Hashset .Net 3.5对哈希集.Net 3.5进行排序
【发布时间】:2012-05-16 18:27:15
【问题描述】:

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

【问题讨论】:

  • 你不能。 HashSet 未按定义排序。你想创建一个数组的排序副本吗?
  • 就地排序还是排序副本?

标签: c# .net-3.5


【解决方案1】:

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

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

【讨论】:

  • 请注意,SortedSet 不会像使用 HashSet 时那样包含不同的值,但您可以在使用适当的扩展方法构造它时加载不同的值。
  • @ericosg 我不明白你的评论。
  • 我的意思是,如果您需要 SortedSet 中的 Distinct 值,您需要调用 .Distinct() 以获得它们的不同视图。如果你需要一个排序的 HashSet,你需要调用 .OrderBy() 来获得一个排序的视图。
  • 抱歉,这里的关键字是 Set,而不是 hash。 SortedSet 也没有重复。 “SortedSet 在插入和删除元素时保持排序顺序,不会影响性能。不允许重复元素。”
  • SortedSet 在 3.5 中不可用
【解决方案2】:

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

【讨论】:

  • 这显然不对哈希集本身进行排序,而是返回哈希集的排序视图。
  • 是的,没错,HashSet 中包含的值没有排序,但可以在排序视图(或副本)中访问。
【解决方案3】:

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

如果您需要 sorted hashset 那么您可以使用SortedDictionary 类 - 只需为 TValue 泛型使用一些虚拟类型(即 bool)参数。

SortedSet 类在 .NET 3.5 中不可用。

【讨论】:

    猜你喜欢
    • 2015-01-01
    • 2015-10-23
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 2013-12-04
    相关资源
    最近更新 更多