2012-10-11 122 views
1

我有一個對象是這樣的:如何創建這個Linq函數?

Tuple<Question, Levels[]> 

// question, { easy, medium, hard } 

Levels是四個選項枚舉:簡單,中等,困難和專家。

而我希望對於包含該元組的每個枚舉,LINQ函數提供一個Dictionary<Question, Levels>。例如

如果我的元組有三個層次,字典應該有三個值,

// question, Easy 
// question, Medium 
// question, Hard 
+3

所以,問題是每個級別都一樣,它是字典中的關鍵?這在運行時會失敗。 –

+0

你可以做的最好:'Dictionary ' –

+0

好吧,一本字典應該是最好的方法,也許一個Tuple而不是Dictionary –

回答

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]; 
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