通过忽略重复键创建字典
Create a Dictionary by ignoring repeating keys
假设我有这个词典:
var Dict = Dictionary<Obj, Value>
我想创建一个新的:
var Dict2 = Dictionary<Obj.ParentId, Value>
但是,可能存在具有相同 ParentId
的对象,因此在创建新词典时会出现问题。具有相同 ParentId
的任何两个条目都将具有相同的值,因此我只关心保留其中一个条目。有没有办法通过 LINQ 轻松做到这一点?
执行此操作的最简单方法可能是强制使用循环。在这种方法中,最后一个获胜 - 但是,正如您所说,这对您的情况无关紧要:
var dict2 = new Dictionary<Obj.ParentId, Value>();
foreach (var (key, value) in dict1)
{
dict2[key.ParentId] = value;
}
您也可以使用 LINQ 执行此操作,但它的性能可能较低,因为它必须先执行 'distinct' 部分:
var dict2 = dict1
.DistinctBy(x => x.Key.ParentId)
.ToDictionary(x => x.Key.ParentId, x => x.Value);
您可以使用 Linq:查询 Dict
和 materialize 结果为 Dict2
var Dict2 = Dict
.GroupBy(pair => pair.Key.ParentId, pair => pair.Value)
// Or group.Last().Value or some other logic
.ToDictionary(group => group.Key, group => group.First().Value);
或者您可以尝试循环:
var Dict2 = Dictionary<Obj.ParentId, Value>();
foreach (var pair in Dict)
Dict2.TryAdd(pair.Key.ParentId, pair.Value);
假设我有这个词典:
var Dict = Dictionary<Obj, Value>
我想创建一个新的:
var Dict2 = Dictionary<Obj.ParentId, Value>
但是,可能存在具有相同 ParentId
的对象,因此在创建新词典时会出现问题。具有相同 ParentId
的任何两个条目都将具有相同的值,因此我只关心保留其中一个条目。有没有办法通过 LINQ 轻松做到这一点?
执行此操作的最简单方法可能是强制使用循环。在这种方法中,最后一个获胜 - 但是,正如您所说,这对您的情况无关紧要:
var dict2 = new Dictionary<Obj.ParentId, Value>();
foreach (var (key, value) in dict1)
{
dict2[key.ParentId] = value;
}
您也可以使用 LINQ 执行此操作,但它的性能可能较低,因为它必须先执行 'distinct' 部分:
var dict2 = dict1
.DistinctBy(x => x.Key.ParentId)
.ToDictionary(x => x.Key.ParentId, x => x.Value);
您可以使用 Linq:查询 Dict
和 materialize 结果为 Dict2
var Dict2 = Dict
.GroupBy(pair => pair.Key.ParentId, pair => pair.Value)
// Or group.Last().Value or some other logic
.ToDictionary(group => group.Key, group => group.First().Value);
或者您可以尝试循环:
var Dict2 = Dictionary<Obj.ParentId, Value>();
foreach (var pair in Dict)
Dict2.TryAdd(pair.Key.ParentId, pair.Value);