2014-02-18 53 views
0

我有一個數組,並希望把它分解爲兩件如何將數組拆分爲兩個數組?

現在:         [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

New_1:[0, 2, 4, 6, 8]

New_2:[1, 3, 5, 7, 9]

所以採取一個ele並跳過下一個元素。 看起來很簡單,但我怎麼用C#做到這一點?

非常感謝

回答

2

您可以使用LINQ,Enumerable.Where並取得與該有甚至指標元素的數組。

var New_1 = arr.Where((c,i) => i % 2 == 0).ToArray(); 
var New_2 = arr.Where((c,i) => i % 2 != 0).ToArray(); 

你可以收集的元素的索引和應用條件檢查,如果指數爲偶數或奇數,並得到按照陣列。

Enumerable.Where方法(IEnumerable,Func)基於謂詞過濾值序列。 每個元素的索引用在謂詞函數的邏輯中。 謂詞的第一個參數表示要測試的元素。該 第二個參數表示的元素中 源的從零開始的索引,msdn

+0

不要忘了'.ToArray()' –

+0

OP具有陣列已經 – Adil

+1

但他想要一個數組作爲結果。 'Where()'返回一個'IEnumerable' –

0
int[] arr = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
int i = 0; 
List<int[]> twoArr = arr.GroupBy(x => i++ % 2).Select(g => g.ToArray()).ToList(); 
+0

這會起作用,但它不會給OP他想要的結果(兩個數組)並且(IMO)的可讀性低於Where()'版本 –

+0

@elmugrat如果他想分裂爲10,你會創建10數組手動。不,我不會發布*不好的*回答。 –

+0

如果他沒有說「分成兩份」,我同意你的看法,但由於他只需要兩份,我認爲提高可讀性值得多加一些。 –

1

如何像

int[] arr = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
int[] arr1 = arr.Where((x, i) => i % 2 == 0).ToArray(); 
int[] arr2 = arr.Where((x, i) => i % 2 == 1).ToArray();