我在學習LINQ,我想知道是否有任何方法可以用它來實際生成列表,而不僅僅是查詢已經生成的列表。所以我有下面的代碼使用for循環來獲得隨機大小的整數列表並填充隨機數字,是否有將它轉換爲LINQ?使用LINQ生成一個隨機數的隨機大小集合
var ret = new List<int>();
for (var i = 0; i < _rand.Next(100); i++)
ret.Add(_rand.Next(10));
我在學習LINQ,我想知道是否有任何方法可以用它來實際生成列表,而不僅僅是查詢已經生成的列表。所以我有下面的代碼使用for循環來獲得隨機大小的整數列表並填充隨機數字,是否有將它轉換爲LINQ?使用LINQ生成一個隨機數的隨機大小集合
var ret = new List<int>();
for (var i = 0; i < _rand.Next(100); i++)
ret.Add(_rand.Next(10));
你可以這樣做:
Random _rand = new Random();
var results = Enumerable.Range(0, _rand.Next(100))
.Select(r => _rand.Next(10))
.ToList();
你可以做這樣的:
List<int> result = Enumerable.Range(0, _rand.Next(100))
.Select(x => _rand.Next(10))
.ToList();
使用LINQ這裏會給出較差的性能,我不知道,要麼提高了可讀性。這可能是最好做這樣的:
int length = _rand.Next(100);
for (var i = 0; i < length; i++)
{
ret.Add(_rand.Next(10));
}
爲什麼,如果你可以創建範圍只需創建空數組`new int [_rand.Next(100)]。選擇(r => _rand.Next(10))。ToList()`? – Necronomicron 2018-03-06 22:41:59
順便說一句,我想在你原來的解決方案,你沒有得到你期待什麼,因爲_rand。接下來(100)針對每個循環迭代進行評估。所以列表長度在[0; 100)
您可以使用NBuilder:
var random = new Random();
var list = Builder<int>.CreateListOfSize(random.Next())
.WhereAll()
.HaveDoneToThem(x => random.Next())
.Build();
NBuilder的好處是,你可以用它不僅可以輕鬆地創建的圖元的大名單(簡單),也可以輕鬆地創建複雜的大名單類型(不能算小):
var list = Builder<Product>.CreateListOfSize(100)
.WhereAll()
.HaveDoneToThem(x => x.Name = GetRandomName())
.And(x => x.Cost = GetRandomCost())
.Build();
我認爲這是不優雅首先生成一個數字序列只把它扔掉。 這些方法當場交付隨機數(你雖然有冗長支付):
IEnumerable<int> GetRandomSequence(int maxNumber)
{
var random = new Random();
while (true)
yield return random.Next(maxNumber);
}
IEnumerable<int> GetRandomSequence(int maxNumber, int maxCount)
{
return GetRandomSequence(maxNumber).Take(maxCount);
}
var random = new Random();
var list = GetRandomSequence(100, 10).ToList();
我愛我怎麼能寫相同的F#:
let random = new Random();
let list = Seq.init (random.Next 10) (fun _ -> random.Next 100)
|> List.ofSeq;
謝謝。我試過enumerable.range之前,但從來沒有想過要做一個選擇後。猜猜我還有很多要學習LINQ。 – Sathariel 2011-02-05 00:23:02
爲什麼創建Range只需創建空數組`new int [_rand.Next(100)]。Select(r => _rand.Next(10))。ToList()`? – Necronomicron 2018-03-06 22:40:24
因爲我們不需要一個空數組 - 實際上`Enumerable.Range`沒有在內部做任何分配,它只是使用延遲執行生成一個整數範圍 – BrokenGlass 2018-03-07 00:00:54