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的旋转相结合。
答案 0 :(得分:2)
使用选择接受索引参数的版本。然后取mod(%)运算符,看看结果数是偶数还是奇数。 (index%size%2 == 0)。
您可以选择具有值的元组或匿名类型,以及它是偶数/奇数。然后GroupBy使用偶数/奇数作为组键,并将值作为组值。
values.Select ((value, index) =>
new
{
Value = value,
First = index % size % 2 == 0
}
).GroupBy(pair => pair.First, pair => pair.Value)
答案 1 :(得分:0)
也许这个:
var group0 = strings.Where((s, i) => (i/rotation)%2 == 0).ToArray();
var group1 = strings.Where((s, i) => (i / rotation) % 2 == 1).ToArray();
答案 2 :(得分: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();