【发布时间】:2013-05-03 07:25:39
【问题描述】:
您好,我有一个列表:
1 A2 一个 3 4 乙 1 乙二 C 1我想选择至少包含这 3 个数字的字母:1,2,3
所以在这种情况下会选择字母 A。
你能帮我把它写成 LINQ 表达式吗?
非常感谢!
【问题讨论】:
您好,我有一个列表:
1 A2 一个 3 4 乙 1 乙二 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;}
}
【讨论】: