2016-11-21 2 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?

Может ли кто-нибудь показать мне способ сделать это быстро (предположим, что в списке 10 000 игроков)? Ли 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

Смежные вопросы