用通俗易懂的英语解释这个lambda表达式
本文关键字:lambda 表达式 解释 通俗易懂 英语 | 更新日期: 2023-09-27 18:25:56
我将MSDN中的查询语法Select example转换为Lambda。它很有效,我自己也写过,但我无法理解下面的评论。我的意思是,我正在从数字数组中选择,但它运行良好,显示等价字符串而不是的数字。它是如何匹配这两个数组的?
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
string[] strings = {"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine" };
//Confusing line: **How would we represent this line below in plain english?**
var result = numbers.Select(d => strings[d]);
foreach (var d in result)
{
Console.WriteLine(d);
}
输出:
five
four
one
..rest of numbers follow
查询语法中的MSDN原始代码:
var result=
from n in numbers
select strings[n];
foreach (var s in strings)
{
Console.WriteLine(s);
}
也许解释这样的事情有点棘手,但我希望有人说得对,这样才有意义:)
感谢
将.Select()
视为"创建=>
之后的IEnumerable。"
作为foreach,它看起来像:
var result = new List<string>();
foreach(var d in numbers)
{
result.Add(strings[d]);
}
return result;
一个谦虚的尝试:
"对于名为numbers
的列表中的每个数字,从名为strings
的字符串列表中取相应位置的字符串。"
我从数字数组中进行选择,但它运行良好的数字显示等效字符串。
这是您的Select子句,它从d
索引处的strings
数组中进行选择,其中d
是int
数组numbers
中的每个数字
我认为它看起来很奇怪的原因是用作示例的数据。此行:
var result = numbers.Select(d => strings[d]);
就是简单地取数字中的整数并使用它们为字符串编制索引,然后将其放入新的IEnumerable
结果中。如果你仔细观察strings
,你会注意到:
strings[0] = "zero"
strings[1] = "one"
strings[2] = "two"
... and so on
因此,strings
数组实际上是一个字典,允许您通过将数字提供为int
来查找数字的字符串表示。这意味着,当您在查询中对字符串[d]进行索引时,您将从numbers
中获取整数,并将该值转换为字符串。
我想说一些类似的东西
遍历
numbers
数组中的每个整数,选择元素位于strings
数组中的整数位置,并将其放置在IEnumerable集合中。
这两个数组具有相同的Length
,而LINQ
实际上通过numbers
进行了一些循环,将index
传递到strings
并返回strings[index]
。
关键是numbers
不能包含任何等于或大于strings
的Length
的元素