使用Skip和Take来获取数组中的备用项

Jon*_*Jon 5 .net c# linq

我有一个包含以下项目的字符串数组:

string s = "M,k,m,S,3,a,5,E,2,Q,7,E,8,J,4,Y,1,m,8,N,3,P,5,H";
 var items = s.split(',');
 var topThree = items.Take(3);
 var alternating1 = items.Skip(3).Take(1).Skip(1).Take(1).Skip(1).Take(1).Skip(1).Take(1);
Run Code Online (Sandbox Code Playgroud)

alternating1变量没有任何内容,我想我理解为什么.在Skip之后然后Take it返回它中的1个项目,然后它尝试跳过(1)和Take(1)但是那里什么都没有.

有没有办法可以做这种交替模式?

Jon*_*eet 11

最简单的方法是使用Where带索引的重载:

var alternating = input.Where((value, index) => (index & 1) == 0);
Run Code Online (Sandbox Code Playgroud)

或者% 2相反地使用:

var alternating = input.Where((value, index) => (index % 2) == 0);
Run Code Online (Sandbox Code Playgroud)

  • 关于样式的一个小问题:不会使用`index%2'比`index&1`更能说明代码的高级目的?查询的目的是返回每个其他项,而不是执行bit-twiddling. (2认同)