我有列表A包含{1,2,3,4,5,6}
List<int> A = new List<int>(){1,2,3,4,5,6};
List<int> m=new List<int>();
for(int i=1;i<A.count;i++)
{
int j=A[i]+A[i-1];
m.add(j);
}
Run Code Online (Sandbox Code Playgroud)
如何使用LinQ进行相同的操作?
Ani*_*Ani 38
那么,直接的翻译将是:
var m = Enumerable.Range(1, A.Count - 1)
.Select(i => A[i] + A[i - 1])
.ToList();
Run Code Online (Sandbox Code Playgroud)
但也要考虑:
var m = A.Skip(1)
.Zip(A, (curr, prev) => curr + prev)
.ToList();
Run Code Online (Sandbox Code Playgroud)
或者在这里使用Jon Skeet的扩展:
var m = A.SelectWithPrevious((prev, curr) => prev + curr)
.ToList();
Run Code Online (Sandbox Code Playgroud)
但正如Jason Evans在评论中指出的那样,考虑到您现有的代码完全可以理解(并且简短)并且您希望将所有结果实现到列表中,这对可读性或简洁性没有多大帮助.
没有什么不对的:
var sumsOfConsecutives = new List<int>();
for(int i = 1; i < A.Count; i++)
sumsOfConsecutives.Add(A[i] + A[i - 1]);
Run Code Online (Sandbox Code Playgroud)
小智 13
好的,你可以使用列表中的Next项:
A.SkipWhile(x => x != value).Skip(1).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
所以要使用上一个项目:
var B = A.ToList();
B.Reverse();
B.SkipWhile(x => x != value).Skip(1).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23472 次 |
| 最近记录: |