-2
var strings = new List<string> 
{ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p" };

int rotation = 4; // could also be 1,2,3,4,5,6,7,8 but 4 is for the sample

我想查询字符串列表并返回包含此数据的匿名类型的分组列表:

group0: a,b,c,d,i,j,k,l
group1: d,e,f,g,m,n,o,p

如果旋转2,那将是另一个样本:

group0: a,b,e,f,i,j,m,n
group1: c,d,g,h,k,l,o,p

不知何故,我必须检查每个字符串及其索引位置,找到一个聪明的算法并将其与 4 的旋转结合起来。

4

3 回答 3

2

使用 Select 接受索引参数的版本。然后取 mod (%) 运算符,看看得到的数字是偶数还是奇数。(索引 % 大小 % 2 == 0)。

您可以选择带有值的元组或匿名类型以及它是偶数/奇数。然后 GroupBy 使用偶数/奇数作为组键,值作为组值。

values.Select ((value, index) => 
    new 
    {
        Value = value,
        First = index % size % 2 == 0
    }
).GroupBy(pair => pair.First, pair => pair.Value)
于 2013-03-31T20:12:46.493 回答
0

也许是这样:

var group0 = strings.Where((s, i) => (i/rotation)%2 == 0).ToArray();
var group1 = strings.Where((s, i) => (i / rotation) % 2 == 1).ToArray();
于 2013-03-31T20:10:11.860 回答
0
var strings = new List<string> { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p" };
int rotation = 2;

int inx = 0;
var groups = strings.GroupBy(s => (inx++ / rotation)%2)
                    .Select(g => g.ToList())
                    .ToList();
于 2013-03-31T20:22:07.747 回答