在不使用 ForEach 循环的情况下遍历列表
Posted
技术标签:
【中文标题】在不使用 ForEach 循环的情况下遍历列表【英文标题】:Iterating through a list with out using ForEach loop 【发布时间】:2013-02-27 07:47:39 【问题描述】:我有一个字符串列表:
var list = new List<string> "apples","peaches", "mango";
有没有办法在不使用 foreach 循环的情况下遍历列表并在控制台窗口中显示项目,可能是使用 lambda 和委托。
我希望输出如下所示:
以下水果可供选择: 苹果 桃子 芒果
【问题讨论】:
为什么要在没有foreach
的情况下这样做?
这是一个提示:检索长度并从 0 迭代到长度 -1
有很多方法可以做到这一点。有什么要求,为什么foreach
不满足?
重复***.com/questions/559415/…
【参考方案1】:
您可以使用String.Join
连接所有行:
string lines = string.Join(Environment.NewLine, list);
Console.Write(lines);
【讨论】:
你可能救了我的命【参考方案2】:到目前为止,最明显的是老式的 for
循环:
for (var i = 0; i < list.Count; i++)
System.Console.WriteLine("0", list[i]);
【讨论】:
好的,对我来说这是最清晰的版本,我最喜欢它。谢谢【参考方案3】:for (int i = 0; i < list.Count; i++)
Console.WriteLine(list[i])
【讨论】:
【参考方案4】:我喜欢 linq 的这个特殊方面
list.ForEach(Console.WriteLine);
它本身并没有使用 ForEach 循环,因为它使用了 ForEach 演员。但是,嘿,这仍然是一个迭代。
【讨论】:
请注意,List<T>.ForEach
不是 LINQ 方法,而只是一个普通的旧常规 List<T>
方法; LINQ 方法永远不会像 List<T>.ForEach
那样纯粹因为它们的副作用而被调用。
是的,技术上我同意,但这些功能通常与 linq 混为一谈 :-)【参考方案5】:
您可以使用List<T>.ForEach
方法,它实际上不是 LINQ 的一部分,但看起来像:
list.ForEach(i => Console.WriteLine(i));
【讨论】:
【参考方案6】:迭代List的方式有3种:
//1 METHOD
foreach (var item in myList)
Console.WriteLine("Id is 0, and description is 1", item.id, item.description);
//2 METHOD
for (int i = 0; i<myList.Count; i++)
Console.WriteLine("Id is 0, and description is 1", myList[i].id, myMoney[i].description);
//3 METHOD lamda style
myList.ForEach(item => Console.WriteLine("id is 0, and description is 1", item.id, item.description));
【讨论】:
方法 3 的简洁性在一些开发人员中很受欢迎,但它的缺点是你无法“打破”它,如果可以在所有项目都被访问之前减少处理。【参考方案7】:好吧,您可以尝试以下方法:
Debug.WriteLine("The folowing fruits are available:");
list.ForEach(f => Debug.WriteLine(f));
它非常等效于 foreach
循环,但不使用 foreach
关键字,
话虽如此,我不知道为什么在遍历对象列表时要避免 foreach
循环。
【讨论】:
以上是关于在不使用 ForEach 循环的情况下遍历列表的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用swiftUI附带的幻灯片删除的情况下创建自定义删除按钮我没有使用列表,只是使用foreach循环
Laravel 在不使用 foreach 循环的情况下发送单独的多封邮件