将数组拆分为2个数组C#

编辑:我尝试过Take / Skip方法,但是我收到以下错误:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'string[]'. An explicit conversion exists (are you missing a cast?) 

我不知道我做错了什么因为我复制了赛义德的代码。

我有一个字符串数组(包含20到300个项目),我想从第一个中间分割成2个独立的数组。

我知道如何使用for循环来做到这一点,但我想知道是否有更快/更好的方法。 我还需要能够正确地分割数组,即使它有奇数个项目,例如:

 string[] words = {"apple", "orange", "banana", "pear", "lemon"}; string[] firstarray, secondarray; SplitArray(words, out firstarray, out secondarray); // Or some other function // firstarray has the first 3 of the items from words, 'apple', 'orange' and 'banana' // secondarray has the other 2, 'pear' and 'lemon' 

你可以使用linq:

 firstArray = array.Take(array.Length / 2).ToArray(); secondArray = array.Skip(array.Length / 2).ToArray(); 

尽管原始arrays大小奇偶校验,为什么会这样?

firstArray采用array.Length / 2元素,第二个跳过第一个array.Length / 2元素,这意味着这两个数组之间没有任何冲突。 当然,如果元素的数量是奇数,我们不能将数组分成两个相等大小的部分。

如果你想在前半部分有更多元素(在奇数情况下),请执行以下操作:

 firstArray = array.Take((array.Length + 1) / 2).ToArray(); secondArray = array.Skip((array.Length + 1) / 2).ToArray(); 
 string[] words = {"apple", "orange", "banana", "pear", "lemon"}; int mid = words.Length/2; string[] first = words.Take(mid).ToArray(); string[] second = words.Skip(mid).ToArray(); 

如果你不想/不能使用LINQ,你可以简单地做:

  string[] words = { "apple", "orange", "banana", "pear", "lemon" }; string[] firstarray, secondarray; int mid = words.Length / 2; firstarray = new string[mid]; secondarray = new string[words.Length - mid]; Array.Copy(words, 0, firstarray, 0, mid); Array.Copy(words, mid, secondarray, 0, secondarray.Length); 

一种更通用的方法,将其分割为您指定的多个部分:

 public static IEnumerable> Split(this IEnumerable list, int parts) { return list.Select((item, index) => new {index, item}) .GroupBy(x => (x.index + 1) / (list.Count()/parts) + 1) .Select(x => x.Select(y => y.item)); } 

*编辑谢谢skarmats

 string[] words = { "apple", "orange", "banana", "pear", "lemon" }; var halfWay = words.Length/2; var firstHalf = words.Take(halfWay); var secondHalf = words.Skip(halfWay);