【问题标题】:Does LINQ have any easy/elegant way to take the first element and put it at the end?LINQ 是否有任何简单/优雅的方式来获取第一个元素并将其放在最后?
【发布时间】:2016-10-25 04:23:10
【问题描述】:

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

例如说我有

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() }))

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

【问题讨论】:

    标签: c# .net algorithm linq


    【解决方案1】:

    只比你所拥有的稍微干净一点:

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

    【讨论】:

      【解决方案2】:

      另一种方式。 (不是更干净)

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

      【讨论】:

        【解决方案3】:

        我会将它保存在一个新的集合中,比如一个列表,因为当其他人阅读我的代码时(如果有的话),我正在做的事情会更清楚。列表针对这种行为进行了很好的优化:

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

        然后就可以迭代列表了,这样做比使用Linq查询更冗长,可以解决这个问题,但可能没那么好阅读。

        【讨论】:

          猜你喜欢
          • 2019-09-07
          • 2013-04-12
          • 1970-01-01
          • 1970-01-01
          • 2010-09-07
          • 2011-02-20
          相关资源
          最近更新 更多