这是一堂课
Class Emp {
String firstName;
String lastName;
int sal;
-----------
}
在这里,我有一个 100 名员工的列表,我想根据薪水和名字和姓氏对对象进行排序。使用收集框架工作我该怎么做?它与字典的工作方式有关?
这是一堂课
Class Emp {
String firstName;
String lastName;
int sal;
-----------
}
在这里,我有一个 100 名员工的列表,我想根据薪水和名字和姓氏对对象进行排序。使用收集框架工作我该怎么做?它与字典的工作方式有关?
.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();
优点和缺点:
不久前我碰巧在博客上写过这个
这真的取决于你需要什么,但我发现字典在类型安全方面是最好的,而且比普通的 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);
希望这可以帮助
番石榴是你的选择。它有助于缓解这种单调的重复性任务。
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/