ToDictionary
ToDictionary()
LINQ 方法可用於基於給定的 IEnumerable<T>
源生成 Dictionary<TKey, TElement>
集合。
IEnumerable<User> users = GetUsers();
Dictionary<int, User> usersById = users.ToDictionary(x => x.Id);
在此示例中,傳遞給 ToDictionary
的單個引數的型別為 Func<TSource, TKey>
,它返回每個元素的鍵。
這是執行以下操作的簡明方法:
Dictionary<int, User> usersById = new Dictionary<int User>();
foreach (User u in users)
{
usersById.Add(u.Id, u);
}
你還可以將第二個引數傳遞給 ToDictionary
方法,該方法的型別為 Func<TSource, TElement>
,並返回要為每個條目新增的 Value
。
IEnumerable<User> users = GetUsers();
Dictionary<int, string> userNamesById = users.ToDictionary(x => x.Id, x => x.Name);
也可以指定用於比較鍵值的 IComparer
。當鍵是字串並且你希望它與大小寫不匹配時,這可能很有用。
IEnumerable<User> users = GetUsers();
Dictionary<string, User> usersByCaseInsenstiveName = users.ToDictionary(x => x.Name, StringComparer.InvariantCultureIgnoreCase);
var user1 = usersByCaseInsenstiveName["john"];
var user2 = usersByCaseInsenstiveName["JOHN"];
user1 == user2; // Returns true
注意:ToDictionary
方法要求所有鍵都是唯一的,必須沒有重複鍵。如果有,則會丟擲異常:ArgumentException: An item with the same key has already been added.
如果你有一個場景,你知道你將擁有多個具有相同鍵的元素,那麼你最好使用 ToLookup
代替。