我有一个像这样的对象:
Tuple<Question, Levels[]>
// question, { easy, medium, hard }
Levels
是一个包含四个选项的枚举:Easy,Medium,Hard和Expert。
我希望对于包含元组的每个枚举,LINQ函数提供Dictionary<Question, Levels>
。例如
如果我的元组有三个级别,那么字典应该有三个值,
// question, Easy
// question, Medium
// question, Hard
答案 0 :(得分:2)
正如其他人所说,问题不是很清楚。我试图向您展示您可能想要做的各种事情:
var stuff = new Tuple<Question, Levels[]>[] {
// ....
};
var flattened = stuff.SelectMany(tup =>
tup.Item2.Select(Level => new { tup.Question, Level }));
var grouped = flattened.GroupBy(flat => flat.Level);
// now you can do
var easyOnes = grouped[Levels.Easy];
var mediumOnes = grouped[Levels.Medium];
答案 1 :(得分:0)
我怀疑Dictionary<TKey, TValue>
是否真的是你所追求的,因为这需要唯一的密钥。
您最接近的可能是使用ToLookup<TKey, TElement>
扩展方法:
var tuple = new Tuple<Question, Levels[]>(question,
new [] { Levels.Easy, Levels.Medium, Levels.Hard});
var questionLevels = tuple.Item2.ToLookup(level => tuple.Item1);
// questionLevels contains:
// question, Levels.Easy
// question, Levels.Medium
// question, Levels.Hard
然后可以使用它来获取问题的所有级别:
var levels = questionLevels[question];
// levels contains:
// Levels.Easy
// Levels.Medium
// Levels.Hard