2011-07-26 12 views

Odpowiedz

9

nie wiem o niczym, w ramach którego to robi, ale jest to dość łatwe do wdrożenia:

// Note: start is inclusive, end is exclusive (as is conventional 
// in computer science) 
public static void Fill<T>(T[] array, int start, int end, T value) 
{ 
    if (array == null) 
    { 
     throw new ArgumentNullException("array"); 
    } 
    if (start < 0 || start >= end) 
    { 
     throw new ArgumentOutOfRangeException("fromIndex"); 
    } 
    if (end >= array.Length) 
    { 
     throw new ArgumentOutOfRangeException("toIndex"); 
    } 
    for (int i = start; i < end; i++) 
    { 
     array[i] = value; 
    } 
} 

Lub jeśli chcesz określić liczbę zamiast początku/końca:

public static void Fill<T>(T[] array, int start, int count, T value) 
{ 
    if (array == null) 
    { 
     throw new ArgumentNullException("array"); 
    } 
    if (count < 0) 
    { 
     throw new ArgumentOutOfRangeException("count"); 
    } 
    if (start + count >= array.Length) 
    { 
     throw new ArgumentOutOfRangeException("count"); 
    } 
    for (var i = start; i < start + count; i++) 
    { 
     array[i] = value; 
    } 
} 
+0

Mam nadzieję, że moja edycja jest uzasadniona .. lub inaczej nazwa zmiennej do 'uptoIndex' – nawfal

+0

@nawfal: Nie, to było celowo (choć niekonsekwentnie) wyłączne. Uporządkowałem to i dodałem alternatywę. –

+0

Jon, dlaczego sprawdzasz wyjątkowe przypadki i rzucasz się, gdy clr to zrobi? Jestem trochę zaskoczony tego rodzaju projektem. Czy wystarczy nie tylko drugi test warunkowy (w obu przykładach)? – nawfal

1

Spróbuj jak to

Array.Copy(source, target, 5); 

Aby uzyskać więcej informacji here

+4

To nie to samo co 'fill'. –

+0

ale nie jest to docelowa tablica do kopiowania ... zajmuje ona długość..mynewArray jest int [] – usr021986

+0

Sugestia Rasel jest w porządku. Przykład roboczy: int [] arr = new int [1000]; Array.Copy (arr.Select (i => 5) .ToArray(), arr, arr.Length); – dmitry

0

Wydaje się, że chcesz zrobić coś bardziej jak to

int[] bar = new int[] { 1, 2, 3, 4, 5 }; 
int newSize = 10; 
int[] foo = Enumerable.Range(0, newSize).Select(i => i < bar.Length ? bar[i] : -1).ToArray(); 

tworząc nową większą tablicę z dawnych wartości i wypełnienie extra.

Dla prostego wypełnienia spróbować

int[] foo = Enumerable.Range(0, 10).Select(i => -1).ToArray(); 

lub zakres sub

int[] foo = new int[10]; 
Enumerable.Range(5, 9).Select(i => foo[i] = -1);