嗨獲取分組ID我有一個列表,以便:LINQ的條件
A 1 A 2 A 3 A 4 B 1 B 2 C 1
我要選擇至少包含這些3個數字字母:1,2,3
所以在這種情況下,將被選中的字母A.
你能幫我寫這個LINQ表達式嗎?
非常感謝!
嗨獲取分組ID我有一個列表,以便:LINQ的條件
A 1 A 2 A 3 A 4 B 1 B 2 C 1
我要選擇至少包含這些3個數字字母:1,2,3
所以在這種情況下,將被選中的字母A.
你能幫我寫這個LINQ表達式嗎?
非常感謝!
首先,製作所需數字的集合。
var required = new[] { 1, 2, 3 };
然後,通過信件分組您的配對。
var groupedPairings = pairings.GroupBy(p => Letter, p => Number);
然後,丟棄那些沒有你的三個必需項目的配對。 (這裏的邏輯是「取所需物品的集合,該組中刪除任何東西,並確保有一無所有」。)
var groupsWithRequired = groupedPairings
.Where(g => !required.Except(g).Any());
現在,如果你只是想信,你可以簡單地做
var lettersWithRequired = groupsWithRequired.Select(g => g.Key);
,或者如果你想從信中來其收藏的數字對應的字典,你可以做
var dictionary = groupsWithRequired.ToDictionary(g => g.Key, g => g.ToArray());
var numbersForA = dictionary["A"]; // = {1, 2, 3, 4}
你可以試試這個,雖然我不覺得這是最好的答案:
var items = new List<Item>{
new Item{Name="A", Value=1},
new Item{Name="A", Value=2},
new Item{Name="A", Value=3},
new Item{Name="A", Value=3},
new Item{Name="A", Value=4},
new Item{Name="B", Value=1},
new Item{Name="B", Value=2},
new Item{Name="C", Value=1},
};
var values = new List<int>{1,2,3};
var query = items.GroupBy (i => i.Name)
.Where (i => i.Select (x => x.Value)
.Intersect(values).Count() == values.Count)
.Select (i => i.Key);
凡
class Item{
public string Name{get;set;}
public int Value{get;set;}
}