C# Linq ToDictionary()函数可以将一个集合转换为字典。它接受委托作为参数,并根据选择的键和值创建一个字典。
下面是ToDictionary()函数的完整语法:
public static Dictionary<TKey, TElement> ToDictionary<TSource, TKey, TElement>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
Func<TSource, TElement> elementSelector
)
其中,source是要进行转换的集合,keySelector是用于选择键的委托,elementSelector是用于选择值的委托。
示例1:使用ToDictionary()将一个字符串集合转换为字典,其中字符串的长度用作键,字符串本身用作值。
List<string> words = new List<string>() {"apple", "banana", "cherry", "pear"};
Dictionary<int, string> dictionary = words.ToDictionary(w => w.Length, w => w);
// 输出字典
foreach (KeyValuePair<int, string> pair in dictionary)
{
Console.WriteLine("Key: {0}, Value: {1}", pair.Key, pair.Value);
}
输出:
Key: 5, Value: apple
Key: 6, Value: banana
Key: 6, Value: cherry
Key: 4, Value: pear
注意到字典中有两个键的值都是6,这是因为“banana”和“cherry”的长度都是6。
示例2:使用ToDictionary()将一个自定义类型的集合转换为字典,其中自定义类型的某个属性用作键,对象本身用作值。
假设我们有一个自定义类型Person,其中有一个属性叫做Id,表示这个人的身份证号码。
class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
现在我们有一个Person类型的集合,我们想要以每个人的Id作为键,每个Person对象本身作为值,来创建一个字典。
List<Person> people = new List<Person>
{
new Person { Id = 1, Name = "Alice" },
new Person { Id = 2, Name = "Bob" },
new Person { Id = 3, Name = "Charlie" }
};
Dictionary<int, Person> dictionary = people.ToDictionary(p => p.Id, p => p);
// 输出字典
foreach (KeyValuePair<int, Person> pair in dictionary)
{
Console.WriteLine("Key: {0}, Value: {1}", pair.Key, pair.Value.Name);
}
输出:
Key: 1, Value: Alice
Key: 2, Value: Bob
Key: 3, Value: Charlie
这个例子中,我们使用了自定义类型Person,并在ToDictionary()函数中通过lambda表达式指定了键和值的属性。