gpt4 book ai didi

c# - 使用 linq 将列表转换为字典而不用担心重复

转载 作者:IT王子 更新时间:2023-10-29 03:32:40 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com