1
比方說,我有串鑰匙到小數的集合,像這樣:如何在C#中傳遞一組鍵和數組?
{ "Alfred", [1, 2] }
{ "Batman", [1, 2, 3] }
我如何在C#中很容易反轉這個關係到集合將是:
{ 1, ["Alfred", "Batman"] }
{ 2, ["Alfred", "Batman"] }
{ 3, ["Batman" ] }
比方說,我有串鑰匙到小數的集合,像這樣:如何在C#中傳遞一組鍵和數組?
{ "Alfred", [1, 2] }
{ "Batman", [1, 2, 3] }
我如何在C#中很容易反轉這個關係到集合將是:
{ 1, ["Alfred", "Batman"] }
{ 2, ["Alfred", "Batman"] }
{ 3, ["Batman" ] }
你可以使用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.Key
和g => g.Select(v => v.Key)
之間的區別是:前者選擇組的關鍵,而後來選擇原詞典的關鍵。