2012-12-23 81 views
0

我試過以這種方式複製數組我可以用線程在數組中緊縮數據,但顯然沒有將數組拆分成更小的塊(可以說1個數組 - > 4個季度(4個陣列))。從x複製一個數組到y而不是x到array.length

唯一的方法,我可以從指定的(int)起點找到副本,並將所有前導數據從開始複製到結尾,如果我使用多個線程來關閉數據,則它將使線程化點失效。

這裏是僞代碼來顯示我想要做什麼。

int array { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } 
int split1 { 0, 1, 2, 3 } 
int split2 { 4, 5, 6, 7 } 
int split3 { 8, 9, 10, 11 } 
int split4 { 12, 13, 14, 15 } 

或可以說該陣列的長度不能所有領先的數據從被分割均勻

int array { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 } 
int split1 { 0, 1, 2, 3 } 
int split2 { 4, 5, 6, 7 } 
int split3 { 8, 9, 10, 11 } 
int split4 { 12, 13, 14, 15, 16} 

回答

2

我能找到從指定的(int)的副本的唯一方法開始點和副本從開始到結束,如果我使用多個線程來壓縮數據,則它將使線程化成爲可能。

這是一個恥辱,你沒有顯示哪種方法是。 Array.Copy有多種過載,用於將數組的部分複製到另一個陣列。 This one可能是最有幫助的:

public static void Copy(
    Array sourceArray, 
    int sourceIndex, 
    Array destinationArray, 
    int destinationIndex, 
    int length 
) 

或者,看看Buffer.BlockCopy,其具有基本相同的特徵 - 但這些值都在字節而不是數組索引項。它也只適用於基元數組。

另一種方法是不創建數組的副本 - 如果每個線程知道應該使用哪個數組的段,它可以直接訪問它。您還應該考慮將Parallel.ForEach(以及類似的方法)作爲在更高級別上輕鬆並行操作的一種方式。

+0

啊,這就是我錯了我正在使用variable.copyTo()不Array.Copy()謝謝 –

相關問題