如何反转显示列表内容的顺序?

4

假设我有一个整数列表。

var myList = new List<int>();
1, 2, 3, 4, 5, ..., 10

有没有任何函数可以让我以相反的顺序显示它们,即
10, 9, 8, ..., 1

编辑


public List<Location> SetHierarchyOfLocation(Location location)
    {
        var list = new List<Location>(7);
        var juridiction = location.Juridiction;
        if (juridiction > 0)
        {
            while (juridiction > 0)
            {
                var loc = repository.GetLocationByID(juridiction);
                list.Add(loc);
                juridiction = loc.Juridiction;
            }
        }
        return list;
    }

由于列表是按位置排列的,我希望也能够反向显示它。

现在,当我写 return list.Reversed() 时,会出现错误。

谢谢帮忙!

3个回答

16

var reversed = myList.Reverse() 应该能解决问题。

编辑:

更正 - 正如OP发现的那样,List.Reverse会就地反转列表,而不像Enumerable.Reverse那样创建一个新序列。因此,答案是简单的 myList.Reverse(); - 无需分配给新变量。


1
我遇到了一个错误:“...无法将void分配给隐式类型的本地变量...” - Richard77
抱歉,我忘记了有一个List.Reverse-我的示例假定为IEnumerable。这实际上相当令人困惑- Enumerable.Reverse(扩展方法)返回反转的枚举。List.Reverse在原地反转元素,这就是你所看到的。 - Chris Shain
有人给我的回答点了踩。如果有什么问题,我想知道是什么并加以纠正,但是一旦你提到错误,我就会相应地进行调整。我相当确定现在它是正确的。 - Chris Shain
我过于简化了我的问题,请现在查看整个代码。我刚刚编辑了这个问题。 - Richard77

7
有没有一种函数可以使我将它们以相反的顺序显示,即从后往前?这取决于您是想在原地反转它们,还是仅生成一个值序列,该序列是底层序列的反序而不改变列表。如果是前者,只需使用List.Reverse。
// myList is List<int>
myList.Reverse();
Console.WriteLine(String.Join(", ", myList));

如果是后者,关键是使用 Enumerable.Reverse 方法:
// myList is List<int>

Console.WriteLine(
    String.Join(
        ", ", 
       myList.AsEnumerable().Reverse()
    )
);

为了编写一个漂亮的一行代码,确保你使用了 using System.Linq;


我遇到了一个错误:“...无法将void分配给隐式类型的本地变量...” - Richard77
我认为你不是因为我没有给任何隐式类型的本地变量分配。请再试一次。请注意,我提供了两种方法。一种使用List<T>.Reverse,另一种使用Enumerable.Reverse - jason
你也可以使用语法 myList.AsEnumerable().Reverse() - Rick Sladkey

-1
要对List<Location>进行反向循环,您应该使用以下代码:
foreach (Location item in myList.Reverse().ToList())
{
   // do something ...
}

.Reverse() 是一种原地反转的方法;它不会返回一个新的列表。在 .Reverse() 之后使用 .ToList() 就可以解决问题。


1
ToList无法编译通过,因为它是一个原地反转操作。它返回的是void类型。 - Servy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接