2014-07-02 15 views
1

[a,b,c,d]转换为其元素连续对的阵列的最简单方法是使用LINQ[[a,b],[c,d]]?它有可能吗?如何使用LINQ将简单数组转换为其元素的连续对的数组?

X = [A,B,C,d]→Y = [[A,B],[C,D]]

谢谢!

P.S.如果不是LINQ,那么如何以最简单高效的方式完成?

+1

所以你想从原始数组中配对偶数和奇数元素? – wbennett

+0

如果元素数量很奇怪,会发生什么? –

+0

[MoreLinq](https://code.google.com/p/morelinq/source/browse/MoreLinq/Batch.cs)具有可以执行此操作的“Batch”方法。 –

回答

4

是的,它是可能的,:

var result = yourCollection 
      .Select((x,idx) => new { x, idx }) 
      .GroupBy(g => g.idx/2) 
      .Select(g => g.Select(p => p.x).ToArray()) 
      .ToArray(); 

由于没有内置的方法来直接做到这一点,代码看起来像messy.It会更好,如果你可以用Batch方法从MoreLINQ库。那么你可以使用:

var result = yourCollection.Batch(2).Select(x => x.ToArray()).ToArray(); 
+1

+1伟大的解决方案 – Christos

+0

这真棒和工作解决方案!我很欣赏你度过的时间和你的知识,男人!非常感谢! –

相关问题