2012-07-22 59 views
1

比方說,我有串鑰匙到小數的集合,像這樣:如何在C#中傳遞一組鍵和數組?

{ "Alfred", [1, 2] } 
{ "Batman", [1, 2, 3] } 

我如何在C#中很容易反轉這個關係到集合將是:

{ 1, ["Alfred", "Batman"] } 
{ 2, ["Alfred", "Batman"] } 
{ 3, ["Batman" ] } 

回答

4

你可以使用LINQ:

var d = new Dictionary<string,int[]>{ 
    {"Alfred", new[] {1,2}} 
, {"Batman", new[] {1,2,3}} 
}; 
var res = d 
    .SelectMany(p=>p.Value.Select(v => new {p.Key, Value = v})) 
    .GroupBy(p => p.Value) 
    .ToDictionary(g => g.Key, g => g.Select(v => v.Key).ToArray()); 
foreach (var p in res) 
    Console.WriteLine("{0} = ({1})", p.Key, string.Join(", ", p.Value)); 

這段代碼產生此輸出(ideone link):

1 = (Alfred, Batman) 
2 = (Alfred, Batman) 
3 = (Batman) 

注意g => g.Keyg => g.Select(v => v.Key)之間的區別是:前者選擇的關鍵,而後來選擇原詞典的關鍵。