2015-07-01 7 views
2

У меня есть массив объектовСравнить все элементы из списка и вернуться в новом списке

List<Card> cardsOnTheScreen = new List<Card>(5); 

Каждая карта имеет перечислимое поле Honurs, существует 14 видов honurs (валет, дама и т.д.) Кто-нибудь может помочь мне найти, какой из этих элементов более одного раза на экране? Результат должен быть, например, Список карт, которые являются двумя или более одинаковыми почестями.

+0

Вам нужно 'GroupBy' и' Count'. Лучше попробуйте, а не задайте полный ответ на вашу проблему. –

ответ

0

Группа по Honurs, фильтр по кол-ву, то получить карточки из группы:

var result = cardsOnTheScreen 
    .GroupBy(c => c.Honurs) 
    .Where(g => g.Count() > 1) 
    .SelectMany(g => g); 

Вот пример. Предполагая, что у нас есть установки, как это:

public enum Honours { Ace, One, Jack, Queen, King } 
public enum Suit { Clubs, Diamonds, Hearts, Spades } 

public class Card 
{ 
    public Honours Honours { get; set; } 
    public Suit Suit { get; set; } 
} 

Тогда мы список, заполненный картами:

List<Card> cardsOnTheScreen = new List<Card> 
{ 
    new Card { Honurs = Honurs.Ace, Suit = Suit.Clubs }, 
    new Card { Honurs = Honurs.Ace, Suit = Suit.Hearts }, 
    new Card { Honurs = Honurs.Ace, Suit = Suit.Spades }, 
    new Card { Honurs = Honurs.One, Suit = Suit.Clubs }, 
}; 

Используя код выше, даст выход:

Ace, Clubs 
Ace, Hearts 
Ace, Spades 
+0

Спасибо, что работает! Если будут две пары, например Ace, Ace & King, результат будет королем. Count == 4? и есть в нем эти 4 предмета? – miechooy

+0

Да, у него будет 4 предмета, попробуйте! – DavidG

0

решение, которое вы должны использовать LINQ, чтобы найти или сравнить элемент в коллекции без использования цикла

List<Card> cardsOnTheScreen = new List<Card>(5); 
List<Card> newList = cardsOnTheScreen.Where(obj => (Object with some condition)); 

после этого вы получите новый список, который вы хотите

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