1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| namespace AtLeastTwo
{
internal class Program
{
static void Main(string[] args)
{
var l1 = new[] { new Item("a"), new Item("b"), new Item("c") };
var l2 = new[] { new Item("b"), new Item("d"), new Item("e") };
var l3 = new[] { new Item("d"), new Item("f"), new Item("f") };
var listOfLists = new[] { l1, l2, l3 };
var comparer = new ItemEqualityComparer();
var result = listOfLists
.SelectMany(l => l.Distinct(comparer)) // aplanir les listes en ne conservant pas les doublons de chaque liste
// (distinct n'est pas nécessaire si les éléments sont déjà uniques)
.GroupBy(i => i, comparer) // regrouper les items identiques
.Where(g => g.Count() > 1) // ne conserver que ceux qui appraissent plus d'une fois (maintenant on cherche les doublons)
.Select(g => g.Key) // garder l'item
.ToArray(); // exécuter
Console.WriteLine("[");
foreach (var s in result)
{
Console.WriteLine(s);
}
Console.WriteLine("]");
Console.ReadLine();
}
}
internal class Item
{
public Item(string value)
{
Value = value;
}
public string Value { get; }
public override string ToString() => Value;
}
internal class ItemEqualityComparer : IEqualityComparer<Item>
{
public bool Equals(Item x, Item y) => x?.Value == y?.Value;
public int GetHashCode(Item obj) => obj?.Value?.GetHashCode() ?? 0;
}
} |
Partager