首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将一个数组拆分为n个元素组成的组?

如何将一个数组拆分为n个元素组成的组?
EN

Stack Overflow用户
提问于 2010-08-19 01:17:43
回答 6查看 15.7K关注 0票数 21

在c# 4中,将数组分组为包含n个元素的数组列表的最佳方式是什么?

E.g

代码语言:javascript
复制
string[] testArray = { "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8" };

如果我们取n=3的话应该分成两部分。

代码语言:javascript
复制
string[] A1 = {"s1", "s2", "s3"};
string[] A2 = {"s4", "s5", "s6"};
string[] A3 = {"s7", "s8"};

可能是一种使用LINQ的简单方法?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-08-19 01:21:54

这将生成一个包含3个元素的字符串数组:

代码语言:javascript
复制
int i = 0;
var query = from s in testArray
            let num = i++
            group s by num / 3 into g
            select g.ToArray();
var results = query.ToArray();
票数 26
EN

Stack Overflow用户

发布于 2010-08-19 01:21:33

我不认为有一个很好的内置方法来解决这个问题,但是你可以像下面这样写一个。

代码语言:javascript
复制
public static IEnumerable<IEnumerable<T>> GroupInto<T>(
  this IEnumerable<T> source,
  int count) {

  using ( var e = source.GetEnumerator() ) {
    while ( e.MoveNext() ) { 
      yield return GroupIntoHelper(e, count);
    }
  }    
}

private static IEnumerable<T> GroupIntoHelper<T>(
  IEnumerator<T> e,
  int count) {

  do {
    yield return e.Current;
    count--;
  } while ( count > 0 && e.MoveNext());
}
票数 9
EN

Stack Overflow用户

发布于 2010-08-19 07:26:22

代码语言:javascript
复制
int size = 3;
var results = testArray.Select((x, i) => new { Key = i / size, Value = x })
                       .GroupBy(x => x.Key, x => x.Value, (k, g) => g.ToArray())
                       .ToArray();

如果您不介意将结果类型化为IEnumerable<IEnumerable<T>>而不是T[][],那么您可以完全省略ToArray调用:

代码语言:javascript
复制
int size = 3;
var results = testArray.Select((x, i) => new { Key = i / size, Value = x })
                       .GroupBy(x => x.Key, x => x.Value);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3514740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档