2011-07-26 27 views

Trả lời

9

Tôi không biết bất cứ điều gì trong khuôn khổ mà làm điều đó, nhưng nó đủ dễ thực hiện:

// 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; 
    } 
} 

Hoặc nếu bạn muốn chỉ định số thay vì bắt đầu/kết thúc:

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

Tôi hy vọng chỉnh sửa của tôi là hợp lý .. hoặc nếu không thì tên biến thành 'uptoIndex' – nawfal

+0

@nawfal: Không, nó được cố ý (mặc dù không nhất quán) độc quyền. Tôi đã dọn dẹp nó và thêm một giải pháp thay thế. –

+0

Jon, tại sao bạn kiểm tra các trường hợp đặc biệt và ném mình khi clr sẽ làm điều đó? Tôi hơi bối rối bởi kiểu thiết kế này. Sẽ không chỉ kiểm tra điều kiện thứ hai (trong cả hai ví dụ của bạn) một mình đủ? – nawfal

1

Hãy thử như thế này

Array.Copy(source, target, 5); 

Để biết thêm thông tin here

+4

Điều đó không làm điều tương tự như 'fill'. –

+0

nhưng nó không phải là mảng đích để sao chép ... nó đang lấy chiều dài..mynewArray là int [] – usr021986

+0

Đề xuất của Rasel là ok. Ví dụ làm việc: int [] arr = new int [1000]; Array.Copy (arr.Select (i => 5) .ToArray(), arr, arr.Length); – dmitry

0

Nó có vẻ như bạn muốn làm một cái gì đó như thế này

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(); 

Tạo một mảng lớn mới với các giá trị cũ và điền vào thêm.

Đối với một điền đơn giản thử

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

hoặc một dải tiểu

int[] foo = new int[10]; 
Enumerable.Range(5, 9).Select(i => foo[i] = -1); 
Các vấn đề liên quan