2016-03-19 46 views
3

我正在尋找一種方法,如何爲數組中特定範圍設置特定值。在C#中爲特定範圍設置數組值

像這樣的事情

僞代碼:

var s = new uinit[64]; 
s[ 0..15] := { 2, 4, 6, 3, 1, 7, 8, 9, 7, 11, 37, 32, 19, 16, 178, 2200 } 
s[16..31] := ... 

我試圖找到在C#這樣的事情,但沒有運氣。 我試圖跟這樣的事情:

我能找到
public void SetArrayValues(int startIndex, uint[] values) 
{ 
    var length = values.Length; 
    this.array[startIndex, startIndex + length] = values; 
} 

唯一的事情就是System.Array.SetValue但是這不符合我的要求。

我錯過了什麼嗎?

感謝所有幫助提前

+3

使用列表 AddRange()並將其轉換爲數組。 – vortex

+0

從你的例子中看起來你不是在尋找一個範圍,只是爲了以連續塊填充數組的方式,而且我認爲這更容易。 @vortex建議正確的方式 –

+0

[如何將數組的一部分複製到C#中的另一個數組?](http://stackoverflow.com/questions/733243/how-to-copy-part-of-an -array到另一陣列式-c)的 –

回答

10

我覺得你可以做的最接近的是通過Array.Copy

var s = new uint[64]; 
uint[] values = { 2, 4, 6, 3, 1, 7, 8, 9, 7, 11, 37, 32, 19, 16, 178, 2200 }; 

int sourceIndex = 0; 
int destinationIndex = 0; 
Array.Copy(values, sourceIndex , s, destinationIndex , values.Length); 
0

不完全匹配你所描述的方法,但你可以創建一個List<int>並使用AddRange()方法。一旦你添加了所有的值,你可以使用ToArray()方法將它變成一個數組。

var numbers = new List<int>(); 
numbers.AddRange(new List<int>{ 2, 4, 6, 3, 1, 7, 8, 9, 7, 11, 37, 32, 19, 16, 178, 2200 }); 
//numbers.AddRange(new List<int> { ... }); 

var asArray = numbers.ToArray(); 
-1

您可以在幾個方面做到這一點。因爲我不知道你的要求和你的代碼,我知道你需要修改它以適合你。但是C#數組與C++數組不同,所以索引始終從零開始。

UInt64[] list = {2, 4, 6, 3, 1, 7, 8, 9, 7, 11, 37, 32, 19, 16, 178, 2200,..}; 
//Length of the list must be 31. That is contain 31 numbers. 

UInt64[] s= new UInt64[31]; 

// You can have all the collection 

for (int i = 0; i < list.Length; i++) 
{ 
    s[i] = list[i]; 
}  

// Or you can modify as below 

for (int i = 0; i < 15; i++) 
{ 
    s[i] = list[i]; 
} 

for (int i = 16; i < 31; i++) 
{ 
    s[i] = list[i]; 
} 
0

首先你定義數組

s1 := { ... } 
    s2 := { ... } 
    s3 := { ... } 
    ... 
    sn := { ... } 

然後,只需Concat的他們在LINQ方法鏈

var result = s1.Concat(s2).Concat(s3)....Concat(sn);

你可以按你喜歡的任何順序來做,並得到確切的結果。僅通過稍微改變鏈就可以很容易地改變結果序列。

3

你可以寫一個擴展方法,使這個簡單的:

public static class ArrayExt 
{ 
    public static T[] Set<T>(this T[] self, int index, params T[] values) 
    { 
     Array.Copy(values, 0, self, index, values.Length); 
     return self; 
    } 
} 

使用它是這樣的:

var s = new uint[64]; 
s.Set<uint>(0, 2, 4, 6, 3, 1, 7, 8, 9, 7, 11, 37, 32, 19, 16, 178, 2200); 

因爲Set()返回數組,你也可以連接像這樣的電話:

s.Set<uint>(0, 2, 4, 6, 3, 1, 7, 8, 9, 7, 11, 37, 32, 19, 16, 178, 2200) 
.Set<uint>(16, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); 

注意:需要明確地將類型放入c全部來自我們在值列表中使用int s的事實。

你真的應該使用uint因爲目的地是uint,那麼就沒有必要指定類型:

var s = new uint[64]; 
s.Set(0, 2u, 4u, 6u, 3u, 1u, 7u, 8u, 9u, 7u, 11u, 37u, 32u, 19u, 16u, 178u, 2200u); 

當然,它與所有類型,例如工作string

var x = new string[64]; 
x.Set(10, "A", "B", "C");