1

我有一个这样的对象:

Tuple<Question, Levels[]>

// question, { easy, medium, hard }

Levels是一个有四个选项的枚举:Easy、Medium、Hard 和 Expert。

我希望对于每个包含元组的枚举,LINQ 函数都提供一个Dictionary<Question, Levels>. 例如

如果我的元组有三个级别,字典应该有三个值,

// question, Easy
// question, Medium
// question, Hard
4

2 回答 2

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];
于 2012-10-11T22:44:57.153 回答
0

我质疑 aDictionary<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
于 2012-10-11T23:34:41.983 回答