【发布时间】:2012-05-16 18:27:15
【问题描述】:
如何在 c# .Net 3.5 中对HashSet<string> 进行排序?
【问题讨论】:
-
你不能。
HashSet未按定义排序。你想创建一个数组的排序副本吗? -
就地排序还是排序副本?
如何在 c# .Net 3.5 中对HashSet<string> 进行排序?
【问题讨论】:
HashSet 未按定义排序。你想创建一个数组的排序副本吗?
你没有。根据定义,HashSet 未排序。
如果你想要一个排序的哈希集,那么你应该使用SortedSet。它公开的方法本质上是HashSet 提供的方法的超集,包括对其内容进行排序的能力。
【讨论】:
您可以使用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
*/
【讨论】:
HashSet
如果您需要 sorted hashset 那么您可以使用SortedDictionary 类 - 只需为 TValue 泛型使用一些虚拟类型(即 bool)参数。
SortedSet 类在 .NET 3.5 中不可用。
【讨论】: