【问题标题】:How to iterate for larger list using foreach如何使用 foreach 迭代更大的列表
【发布时间】:2014-05-28 11:10:42
【问题描述】:

我有两个列表,大小为 5 的列表 1 和大小为 6 的列表 2。 我想使用 foreach 语句迭代更大的列表大小(例如,在这种情况下为 6),但问题是我没有使用 if 条件来检查哪个列表更大。 那么我怎样才能完成必要的任务呢。

if (list1.Count>list2.Count) // here I donot want to use if statement
{                            // do it in 1 statement only
    Size=list1.Count;
    foreach (var item in list1)
    {
        // do something
    }
}
else 
{
    Size = list2.Count;
    foreach (var item in list2)
    {
        // do something
    }
}

【问题讨论】:

  • if-condition 有什么问题?
  • 首先我的需求中有很多列表,看起来也很复杂
  • 如果if 语句中的简单比较对您来说看起来很复杂,我不确定编程是否适合您。
  • @Rik 如果有 5 个不同的列表并执行相同的任务,我将如何使用 'if' 语句,谢谢:p
  • @user1909259 您想知道在许多列表中哪个列表大小更大。然后你只想在较大的那个上运行 foreach?

标签: c# foreach


【解决方案1】:

您可以将条件移动到 foreach 中:

foreach(var item in (list1.Count > list2.Count ? list1 : list2))
{
    // do stuff
}

如果您有多个列表(超过 2 个),您可以使用 LINQ 创建集合并获取最大值:

var myLists = new List<List<T>>(); // T is the generic type of your Lists, obviously
myLists.Add(list1);
myLists.Add(list2);
...
myLists.Add(listN);

// iterate over the largest one:
foreach (var item in myLists.First(l => l.Count == lists.Max(x=>x.Count)))
{
    // do stuff
}

【讨论】:

  • 对不起,我要么不想使用 '> 吗? :' 也是。
  • @user1909259 然后使用&lt; 并交换列表:p
  • 为什么不呢?您还建议如何选择较大的列表而不比较它们的大小?
  • 我在想任何内置的标准方法
  • 该链接中的Zip 操作与您描述的完全不同。
【解决方案2】:
var list = list1.Count > list2.Count ? list1 : list2;

foreach(var item in  list)

【讨论】:

  • 尽管 Rik 的回答也可以,但我更喜欢这个解决方案,因为它更具可读性
  • 我同意这比我的答案更具可读性,但 OP 指定“仅在 1 个语句中执行”。在您的情况下,我建议将 list 重命名为“largerList` 或其他更清晰的名称。
  • 谢谢大家,我在link找到了解决方案,很抱歉打扰你。:p
猜你喜欢
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
相关资源
最近更新 更多