基于LINQ双From子句,如何单行实现两数组元素两两相乘?
用LINQ实现两数组元素两两相乘的单行写法
嘿,刚接触LINQ的时候确实容易摸不清这些语法,完全懂你的感受!其实你要找的就是LINQ里的双from子句,它正好对应嵌套循环的逻辑,能极简实现你要的效果。
具体实现
假设我们有两个数组:
int[] arr1 = { 2, 4, 6 }; int[] arr2 = { 3, 5, 7 };
查询表达式写法(最直观,对应嵌套循环)
这是最接近你嵌套for循环思路的LINQ写法,本质就是做笛卡尔积:
var products = from num1 in arr1 from num2 in arr2 select num1 * num2;
方法链写法(链式调用风格)
如果你更喜欢LINQ的链式调用语法,用SelectMany也能实现完全等效的效果——SelectMany会把每个元素展开成一个序列,然后合并所有结果:
var products = arr1.SelectMany(num1 => arr2.Select(num2 => num1 * num2));
为什么这能替代嵌套循环?
你之前的嵌套for循环逻辑是:遍历第一个数组的每个元素 → 对每个元素遍历第二个数组的所有元素 → 计算乘积。而LINQ的双from子句就是把这个逻辑用声明式语法表达出来,底层执行逻辑和嵌套循环完全一致,只是写法更简洁。
对应的嵌套循环代码参考:
List<int> products = new List<int>(); foreach (int num1 in arr1) { foreach (int num2 in arr2) { products.Add(num1 * num2); } }
额外小技巧
如果需要直接得到数组结果,只需要在LINQ语句后面加ToArray()即可:
var productArray = (from num1 in arr1 from num2 in arr2 select num1 * num2).ToArray();
内容的提问来源于stack exchange,提问作者Sean Ervinson
相关产品推荐
相关产品推荐

