0

这是一堂课

Class Emp {
      String firstName;
      String lastName;
      int sal;
      -----------
}

在这里,我有一个 100 名员工的列表,我想根据薪水和名字和姓氏对对象进行排序。使用收集框架工作我该怎么做?它与字典的工作方式有关?

4

3 回答 3

1

.NET 有几个集合来完成您的任务。

列表

您可以创建一个包含所有实体的列表,并使用方法对它们进行排序Sort。示例如何按薪水排序(假设字段是公开的):

List<Emp> empCollection= new List<Emp>
{
    new Emp { sal = 1000, firstName = "Chris", lastName = "Bakker" },
    new Emp { sal = 1500, firstName = "Bea", lastName = "Smith" },
    // etc.
};
empCollection.Sort((a,b) => a.sal.CompareTo(b.sal));

优点和缺点:

  • 优点:您将集合放在另一个键上。
  • 缺点:尽管列表已排序,但如果在某个键上更快,您将无法搜索。

排序字典

您也可以使用 SortedDictionary。字典是键和值的组合。就您而言,价值永远是员工。它们的关键是您希望对项目进行排序的元素。按名字排序的示例:

SortedDictionary<string, Emp> empCollection= new SortedDictionary<string, Emp>
{
    {"Chris", new Emp { sal = 1000, firstName = "Chris", lastName = "Bakker" }},
    {"Bea", new Emp { sal = 1500, firstName = "Bea", lastName = "Smith" }},
    // etc.
};

优点和缺点:

  • 优点:列表排序后,按键查询非常快。
  • 缺点:您必须单独添加密钥,这感觉就像您在添加重复数据。
  • 缺点:您不能在另一个键上使用集合;您将不得不创建一个新字典。

LINQ

您可以使用 LINQ 创建一个新创建和排序的列表:

List<Emp> empCollection= new List<Emp>
{
    new Emp { sal = 1000, firstName = "Chris", lastName = "Bakker" },
    new Emp { sal = 1500, firstName = "Bea", lastName = "Smith" },
    // etc.
};
List<Emp> sortedEmpCollection = empCollection.OrderBy(e => e.lastName).ToList();

优点和缺点:

  • 优点:语法很容易理解。
  • 缺点:每次都会创建一个新创建的列表(更多的内存管理)。
  • 缺点:尽管列表已排序,但如果在某个键上更快,您将无法搜索。
于 2013-05-08T18:37:58.057 回答
0

不久前我碰巧在博客上写过这个

这真的取决于你需要什么,但我发现字典在类型安全方面是最好的,而且比普通的 HashTable 更快。然而,Collections 还有很多其他选项。有列表和数组列表(几乎没有人再使用它们)仅举几例。MSDN 有大量每种类型的示例,但要获得性能,最好用谷歌搜索一下并做出自己的决定,因为它不仅仅是关于性能的。还有可扩展性以及您是否将使用复杂类型或原始类型。在这种情况下,您似乎正在使用复杂类型,但这可能不是您的总体目标。

此外,如果您需要更改通知或延迟加载等内容,您将需要查看 IObservable 集合和 IQueryable 等内容,它是 IEnumerable 的扩展。

我刚刚注意到您最关心的是排序。在 C# 中,最好的办法是使用 IQueryable,如果您熟悉它,则使用 LINQ。它速度很快,开销很小,可以对你拥有的任何东西进行分类。

使用您的课程,这只是您可以使用 LINQ 做什么的提示

List<Emp> guy = new List<Emp>();

guy.Where(x => x.firstName == "George").OrderBy(x => x.lastName);

希望这可以帮助

于 2013-05-08T17:19:04.667 回答
0

番石榴是你的选择。它有助于缓解这种单调的重复性任务。

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Ordering.html

http://pratimsc.wordpress.com/2011/08/16/sorting-the-easy-way/

于 2013-05-08T17:13:16.710 回答