LINQ是否有任何简单/优雅的方法将第一个元素放在最后?

本文关键字:元素 第一个 最后 方法 任何 是否 简单 LINQ | 更新日期: 2023-09-27 18:14:39

或者我应该说,跳过第一个元素,并在最后回到它。

。假设我有

int[] arr = { 2, 4, 3, 9, 1, 0 }; 

,并希望像

一样遍历它
{ 4, 3, 9, 1, 0, 2 }

我知道有一种方式是这样的

foreach(int i in arr.Skip(1).Append(new int[] { arr.First() }))

这就是为什么我要问是否有更好看和/或更有效的方法

LINQ是否有任何简单/优雅的方法将第一个元素放在最后?

只比你已经得到的稍微干净一点:

foreach(int i in arr.Skip(1).Concat(arr.Take(1)))
{
    ...
}

另一种方式。(不干净)

Enumerable.Range(1, arr.Length)
          .Select(x => arr[x%arr.Length]);

我会把它保存到一个新的集合中,就像列表一样,因为当别人读我的代码时(如果有的话),我在做什么会更清楚。列表很好地针对这种行为进行了优化:

var list = arr.ToList();
list.Add(list.ElemntAt(0));
list.RemoveAt(0);

然后你可以迭代列表,这样做比使用Linq查询更冗长,Linq查询可以解决这个问题,但它可能不太容易阅读。