2013-05-08 66 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:雖然列表已排序,但如果密鑰更快,則無法搜索。