【问题标题】:Reduce nested loops using Linq使用 Linq 减少嵌套循环
【发布时间】:2019-03-27 03:55:38
【问题描述】:

如果可以使用 linq 重写以下嵌套循环,我正在徘徊。这里的问题是,如果“value”包含在“item2”列表中,则返回“item2”。

foreach (var item1 in item1list)
    foreach (var item2 in item1.items2list)
        foreach (var item3 in item2.items3list)
            if (item3 == value)
                return item2;

return null;

【问题讨论】:

  • 请问您认为 Linq 所做的与一系列循环有何不同?
  • @maccettura,它将其抽象为经过良好测试的功能运算符。
  • 我相信它不会,但是使用它可以让我的代码更具可读性...

标签: c# linq nested-loops


【解决方案1】:

前两个循环使用SelectMany,第三个循环使用FirstOrDefault+Any + if 检查:

return item1list.SelectMany(x1 => x1.items2list)
                .FirstOrDefault(x2 => x2.items3list.Any(x3 => x3 == value));

您还可以将Any 调用替换为Contains(value)

它更具可读性吗?可能不是。将您的 3 个循环放在一个具有描述性名称的私有方法中,对于将来阅读该代码的任何人来说可能会更好。

【讨论】:

  • 你的意思是x3 == value(值而不是null)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
相关资源
最近更新 更多