【问题标题】:Better design pattern to compare two lists更好的设计模式来比较两个列表
【发布时间】:2020-01-04 12:05:50
【问题描述】:

我需要对下面提到的场景提出建议:

列表A中的内容:字符串名称,字节[]等

列表 B 中的内容:字符串名称。

我有两个集合,我需要使用列表 B 迭代列表 A 并检查一个序列,如果列表 B 中的名称 == 列表 A 中的名称。

为此,我使用序列长度和 if /else 循环来判断名称是否匹配。

我必须为列表中的每个匹配/不匹配项做出决定和其他处理事情,而且两个列表的大小也不保证相同

有没有更好的方法来避免循环和 if/else?

【问题讨论】:

  • 有一个来自System.LinqIntersect方法,看看现有的线程Intersect Two Lists in C#
  • 您是否正在寻找使代码更简洁或更高效的方法?
  • 更具可读性和效率

标签: c# design-patterns


【解决方案1】:

您可以在构建投影后使用 Enumerable 的Zip 函数:

ListA.Select(a => a.name).Zip(ListB, (a, b) => a == b)

最后你有一个布尔值列表,你可以使用Any 来查找所有项目是否匹配:

ListA.Select(a => a.name).Zip(ListB, (a, b) => a == b).Where(r => r).Any()

【讨论】:

  • 我必须为 list 中的每个匹配/不匹配项目做出决定和其他处理,而且两个列表的大小不保证相同
【解决方案2】:

使用字典将解决性能问题。

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多