0

我正在寻找有效的方法来组合多个哈希集(基于对象键),同时保留非键值(例如下面的版本)。

class MyObject {
    public string Key {get; set;}
    public long Version {get; set;}
    override GetHashCode() { *key* }
    override Equals(...) { *key* }
}

在和中,我需要将哈希集组合到一个主列表中,但也需要所有版本。

我可以通过这种方式合并 3 组:

for (var o in List1.Union(List2).Union(List3))
    Console.WriteLine("{0} : {1}", o.Key, o.Version)

这仅显示列表之一(List1 或包含该项目的任何列表)中的版本。

我需要将这些编译成所有版本的结果..

希望我能这样做:

for (var o in List1.Union(List2).Union(List3).Select((a,b,c) => new DiffObj(){Key=a.Key,VersionA=a.Version,VersionB=b.Version,VersionC=c.Version}))
    Console.WriteLine("{0} : {1},{2},{3}", o.Key, o.VrsionA, o.VersionB, VersionC);

哈希集有可能吗?

更新

重要的是要跟踪哪个列表具有哪个版本(在最终结果中)。

4

1 回答 1

3

听起来你想要一个分组:

var grouped = list1.Select(x => new { List=1, Item=x })
                   .Concat(list2.Select(x => new { List=2, Item=x }))
                   .Concat(list3.Select(x => new { List=3, Item=x }))
                   .GroupBy(pair => pair.Item);

然后,您可以遍历每个组,根据Equalsand将包含相等的值GetHashCode,但仍然可以是不同的。该List值将指示每个项目来自哪个列表。

于 2012-10-23T21:08:07.947 回答