我有一个 Person 对象列表。我想转换为字典,其中键是名字和姓氏(串联),值是 Person 对象。
问题是我有一些重复的人,所以如果我使用这段代码就会爆炸:
private Dictionary<string, Person> _people = new Dictionary<string, Person>();
_people = personList.ToDictionary(
e => e.FirstandLastName,
StringComparer.OrdinalIgnoreCase);
我知道这听起来很奇怪,但我现在并不真正关心重复名称。如果有多个名字,我只想拿一个。无论如何,我是否可以在上面编写这段代码,以便它只采用其中一个名称并且不会在重复项上爆炸?
最佳答案
LINQ 解决方案:
// Use the first value in group
var _people = personList
.GroupBy(p => p.FirstandLastName, StringComparer.OrdinalIgnoreCase)
.ToDictionary(g => g.Key, g => g.First(), StringComparer.OrdinalIgnoreCase);
// Use the last value in group
var _people = personList
.GroupBy(p => p.FirstandLastName, StringComparer.OrdinalIgnoreCase)
.ToDictionary(g => g.Key, g => g.Last(), StringComparer.OrdinalIgnoreCase);
如果您更喜欢非 LINQ 解决方案,那么您可以这样做:
// Use the first value in list
var _people = new Dictionary<string, Person>(StringComparer.OrdinalIgnoreCase);
foreach (var p in personList)
{
if (!_people.ContainsKey(p.FirstandLastName))
_people[p.FirstandLastName] = p;
}
// Use the last value in list
var _people = new Dictionary<string, Person>(StringComparer.OrdinalIgnoreCase);
foreach (var p in personList)
{
_people[p.FirstandLastName] = p;
}
关于c# - 使用 linq 将列表转换为字典而不用担心重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3319016/