2012-10-21 12 views
5

tworzę tablicę z następującym CreateArray statycznej metody:Refactor LINQ ForEach powrócić IEnumerable <T>

public static int[] CreateArray(int size) 
{ 
    var ret = new int[size]; 
    ret[0] = 0; 
    ret[1] = 1; 

    Parallel.ForEach(Enumerable.Range(2, size - 2), i => 
    { 
     ret[i] = Func(i).Count(); 
    }); 

    return ret; 
} 

Gdzie Func wygląda następująco:

public static IEnumerable<int> Func(int i) 
{ 
    ... 
} 

jest to możliwe, byłaby metoda CreateArray w coś w rodzaju:

public static int[] CreateArray(int size) 
{ 
    var tableFromIndex2 = ... 
    return new[] { 0, 1 } 
     .Concat(tableFromIndex2) 
     .ToArray(); 
} 

Odpowiedz

1

Myślę, że PL INQ może być przydatny tutaj:

var tableFromIndex = ParallelEnumerable.Range(2, size - 2) 
     .AsOrdered() 
     .Select(i => Func(i).Count()); 

return new[] { 0, 1 } 
     .Concat(tableFromIndex) 
     .ToArray(); 
+0

Hej svick, myślałem, że to było w porządku, ale faktycznie dostałem wyniki nie zamówione przez "i". Mam na myśli, jestem w stanie uruchomić 'Func (i) .Count()' równolegle, ale następnie wynik powinien być umieszczony w pozycji 'i' ... –

+0

Masz rację, zapomniałem' AsOrdered() ' . Naprawiono teraz. – svick

+0

Dzięki, sick, nie wiem, że "AsOrdered()" istnieje –

Powiązane problemy