这是一个班级
Class Emp {
String firstName;
String lastName;
int sal;
-----------
}
这里我有100名员工的清单,我想根据工资和名字&姓。 使用收集框架工作我该怎么办? 它与字典的工作方式有关吗?
答案 0 :(得分: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));
Pro's and con's:
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.
};
Pro's and con's:
<强> 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();
Pro's and con's:
答案 1 :(得分: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/
答案 2 :(得分: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);
希望这有帮助