2016-11-21 149 views
-3

讓我們假設我有一個像在C#中快速查找子列表

class Player 
{ 
    String FirstName; 
    String LastName; 
    String Team; 
    int UniformNumber; 
    int Height; 
} 

模型類現在我有這個類的一個列表:列出玩家;

此列表中包含某些情況下,例如,

Players[0] = new Player(){ 
    FirstName = "Kobe", 
    LastName = "Byrant", 
    Team = "Lakers", 
    UniformNumber = 24, 
    Height = 19}; //... 

有沒有一種方法可以讓我得到一個子List<Player>類型列表,其中包含相同的高度和相同UniformNumber球員呢?

有人能告訴我一種快速的方法嗎(假設列表中有10000名玩家)? LINQ是否足夠快?謝謝。

[編輯] 之前問這個問題,我使用下面的代碼:

var subList = new List<Player>(); 
     foreach (var player in players) 
     { 
      if (players.Where(p => 
       (p.Height == player.Height) && 
       (p.UniformNumber == player.UniformNumber)).Count() > 1) 
      { 
       subList.Add(item); 
      } 
     } 

我可以得到的結果,但它實在是太慢了,所以我要建議,謝謝。

+4

「是否LINQ不夠快」 - 以及速度有多快你需要它是?你有*使用LINQ嗎? –

+1

LINQ不會給你任何性能提升 – mybirthname

+0

你從哪裏複製那些文本?你的報價全錯了。 –

回答

0

首先,你需要做的屬性市民:

class Player 
{ 
    public String FirstName {get;set} 
    public String LastName {get;set;} 
    public String Team {get;set;} 
    public int UniformNumber {get;set;} 
    public int Height {get;set} 
} 

然後你就可以查詢寫一組這樣的:

var result= ls 
    .GroupBy (l =>new{l.UniformNumber,l.Height}) 
    .Select (l =>  
    new{l.Key.Height,l.Key.UniformNumber,Players=l.Select(s=>s).ToList}).ToList(); 
+0

那些不屬性 - 他們是領域。如果他們*屬性會更好。 –

+0

@JonSkeet:你說得對。我改變了它 – Arion