gpt4 book ai didi

.net - 2个不同类型列表的平等

转载 作者:行者123 更新时间:2023-11-30 23:54:39 24 4
gpt4 key购买 nike

假设我们有 2 个集合,至少 IEnumerable 可以启动 Linq(也假设 .net 4.0):

List<T1> list1;  
List<T2> list2;

我可以定义 T1 和 T2 类型的对象之间的相等性。
  • 验证两个列表是否相等(元素顺序不相关)的最佳方法是什么(即 .net 接口(interface)和 Linq 首选)。
  • 如果我知道对象 T1 和 T2 有一个 ID
  • ,我该如何优化这个问题?

    T1 和 T2 的前例:
    class Device 
    {
    string Id;
    string Name;
    }

    class DeviceInfo
    {
    string Identifier;
    string FriendlyName;
    DateTime CreateDate;
    }

    后期编辑:

    解决方案应该涉及我编写的某种相等比较器,并且足够通用。可能存在 2 个对象具有相同 ID 但名称不同的情况,那么比较应该会失败。例如:
    static bool AreEqual(Device device, DeviceInfo deviceInfo)
    {
    return device.Id == deviceInfo.Identifier &&
    device.Name == deviceInfo.FriendlyName;
    }

    最佳答案

    假设 .NET 4.0:

    Foo[] foos = new Foo[];
    Bar[] bars = new Bar[];

    var areDifferent = foos.Zip(bars, (foo, bar) => foo.Id == bar.Id).Any(b => !b);

    更好的解决方案还会检查 foosbars具有相同的长度,并且没有一个元素是 null也是。当然,这个例子假设集合已经按 Id 排序。 .

    更新:

    因此,这是所有 LINQy 细节中的“更好的解决方案”:
    var areDifferent = foos.Count() != bars.Count() ||
    foos.OrderBy(foo => foo.Id)
    .Zip(
    bars.OrderBy(bar => bar.Id),
    (foo, bar) => foo != null && bar != null && foo.Id == bar.Id)
    .Any(b => !b);

    关于.net - 2个不同类型列表的平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4594102/

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