2013-11-03 31 views
0

函數N次,結果存儲在數組中,我想在lambda-Y的方式來調用函數的N倍,結果存儲在一個陣列(或結果附加到一個列表)。我會怎麼做?呼叫使用蘭巴

我已經試過Enumerable.Repeat(fun(), n).ToArray();這將是理想的,但有趣的()只調用一次。

+0

您需要添加更多詳細信息。什麼類型的對象 - 細節男人! – OneFineDay

+0

引用lambda中的數組或列表,可能是捕獲的變量。 – SJuan76

+0

@DonA - 可以說有一個沒有參數的函數,返回一個int。看來我應該可以使用Enumerator.Repeat,但我現在很累。 –

回答

2

n次調用一個隨機函數並保留所有結果。

IEnumerable<T> CallRepeatedly<T>(Func<T> a, int count) 
{ 
    for(int i=0; i<count; i++) 
    { 
     yield return a(); 
    } 
    yield break; 
} 

是這樣的,你在找什麼?我不確定Func會在每次調用中返回不同結果的條件,但您可以輕鬆地重構將索引作爲參數。

+0

我沒有想到這樣的事情,野! –

+1

+1基本解釋BrokenGlass的解決方案是如何工作的。我會使用'Enumerable.Range'版本,因爲它具有相同的行爲,但出錯的可能性較小。注意:函數結束時不需要「yield break」,這是隱含的。 –

+0

如果將它添加到像'public static class Enumerable {...}這樣的小類中,就像您想要的方法不會丟失一樣。 –

2

我們假設你的函數有一個整型參數,那麼像這樣的工作(否則有你所需要的參數代替):

int n = 10; 
var results = Enumerable.Range(0, n) 
         .Select(myFunction) 
         .ToArray(); 

在這個例子中myFunction會有什麼Func<int, T>其中T是你的回報類型。