一個相當簡單的問題,但我不知道如何轉換這種嵌套回圈:
for (var a = 0; a < n; a )
{
for (var b = a 1; b < n; b )
{
//let here be a creation of a Tuple
list.Add(Tuple.Create(a, b))
}
}
到 LINQ 陳述句
更新:
I tried something like this:
from a in Enumerable.Range(0, n)
from b in Enumerable.Range(1, n)
...
但它沒有用
uj5u.com熱心網友回復:
好的,這是使用 Linq 擴展方法的一種解決方案。
var list = Enumerable.Range(0, n-1)
.SelectMany(
a => Enumerable.Repeat(a, n-1 - a)
.Zip( Enumerable.Range(a 1, n - (a 1)) )
).ToList();
它是如何作業的?好吧,查找所涉及的 Linq 方法的檔案,這應該可以充分了解我的那個丑陋的 Linq 構造在這里發生了什么。(嗯,它不僅丑陋,而且速度如此之慢,以至于你沒有任何違反任何速度限制的風險......)
請注意,生成的串列是 type System.Collections.Generic.List<(int First, int Second)>,它使用C# tuples,這是一個值型別,不要與您在問題代碼中使用的System.Tuple型別(這是一個參考型別)混淆。
這是一個涉及 Linq 查詢語法的解決方案:
var list = (
from a in Enumerable.Range(0, n - 1)
from b in Enumerable.Range(a 1, n - (a 1))
select (a, b)
).ToList();
uj5u.com熱心網友回復:
這可能會有所幫助。
var result = (from a in Enumerable.Range(0, n - 1)
from b in Enumerable.Range(a 1, n - a - 1)
select Tuple.Create(a, b)).ToList();
uj5u.com熱心網友回復:
你可以使用這個:
Enumerable.Range(0, n-1).ToList().ForEach(x => Enumerable.Range(x 1, n-x-1).ToList().ForEach(y => list.Add(Tuple.Create(x,y))));
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/494229.html
