首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对对象进行排序的集合框架

对对象进行排序的集合框架
EN

Stack Overflow用户
提问于 2013-05-09 01:10:05
回答 3查看 271关注 0票数 0

这是一个类

代码语言:javascript
复制
Class Emp {
      String firstName;
      String lastName;
      int sal;
      -----------
}

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

EN

回答 3

Stack Overflow用户

发布于 2013-05-09 02:37:58

.NET提供了几个集合来完成您的任务。

列表

您可以创建一个包含所有实体的列表,并使用Sort方法对它们进行排序。工资排序示例(假设字段为公共字段):

代码语言:javascript
复制
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));

赞成和反对:

  • Pro:您在另一个键上重新排序集合。
  • 缺点:虽然列表已排序,但您无法在某个键上更快地进行搜索。

SortedDictionary

您也可以使用SortedDictionary。字典是键和值的组合。在您的示例中,值始终是员工。key是您希望对项目进行排序的元素。按名字排序的示例:

代码语言:javascript
复制
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.
};

赞成和反对:

  • Pro:列表排序后,按键查询的速度非常快。
  • 缺点:您必须单独添加键,这感觉就像是在添加重复的数据。
  • 缺点:您不能在另一个键上对集合进行重新排序;您必须创建一个新字典。

LINQ

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

代码语言:javascript
复制
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();

赞成和反对:

  • Pro:语法很容易,每次都会创建一个新的列表(更多的内存management).
  • Con:虽然列表是排序的,但你不能搜索,如果在一个键上更快。
票数 1
EN

Stack Overflow用户

发布于 2013-05-09 01:13:17

芭乐是你的赌注。它有助于缓解这种单调重复的任务。

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/

票数 0
EN

Stack Overflow用户

发布于 2013-05-09 01:19:05

我前段时间碰巧在博客上写了这个,here

这真的取决于你需要什么,但我发现字典在类型安全方面是最好的,而且比普通的HashTable更快。然而,对于Collections来说,还有各种各样的其他选择。有列表和数组列表(几乎没有人再使用它们)。MSDN的每种类型都有过多的示例,但为了获得性能,最好搜索一下,然后自己做决定,因为这不仅仅是关于性能的。还有可扩展性,以及您是否要使用复杂类型或原始类型。在这个场景中,您似乎使用了复杂类型,但这可能不是您的总体目标。

此外,如果您需要更改通知或延迟加载之类的东西,您将需要考虑IObservable集合和IQueryable之类的东西,它是IEnumerable的一个扩展。

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

使用您的类,这里只是您可以使用LINQ所做的提示

代码语言:javascript
复制
List<Emp> guy = new List<Emp>();

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

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16446434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档