2013-05-08 40 views
0

这是一类哪个集合框架整理对象

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

在这里我有100名员工的名单,我想根据工资和名字&姓氏的对象进行排序。 使用收集框架工作我该怎么做? 它与字典的工作原理有关?

+0

您是否想同时将'salary'作为'firstName'作为'lastName'进行排序(所以如果工资相等,则比较firstNames)?或者你想在这个时候能够对“薪水”进行排序,而在另一个时刻你可以对“lastName”进行排序? – 2013-05-08 18:24:31

+0

这是哪个平台? Java的? – 2013-05-08 18:40:45

回答

0

我碰巧有博客上讲述这一段时间回来here

这真的取决于你所需要的,但我发现,词典在被类型安全的,最好的以及比正常的HashTable更快。然而,其他选项有各种各样的选项。列表和Arraylists(几乎没有人再使用这些)仅举几例。 MSDN有各种类型的例子,但为了获得性能,最好是谷歌一点点,并做出自己的决定,因为它不仅仅是性能。还有可扩展性以及是否使用复杂或基本类型。在这种情况下,您似乎正在使用复杂类型,但这可能不是您的总体目标。

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

我刚刚注意到你最关心排序。在C#中,你最好的选择是使用IQueryable,如果你熟悉它,可以使用LINQ。它很快就会有很少的开销,并且会对你有的东西进行分类。

使用你的类,这里是你可以使用LINQ做什么

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

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

希望这有助于

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)); 

专业的和反对的:

  • 临:你再打另一个关键的集合。
  • Con:虽然列表已排序,但如果密钥更快,则无法搜索。

SortedDictionary

你也可以使用一个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(); 

专业的和反对的:

  • 临:语法是很容易理解。
  • Con:每次创建新创建的列表(更多内存管理)。
  • Con:虽然列表已排序,但如果密钥更快,则无法搜索。