2011-09-24 59 views
3

比方说,我有一个整数列表。如何颠倒显示列表内容的顺序?

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; 
    } 

由于列表中包含位置按位置,我想以便能够以相反的顺序显示它。

现在,当我写回报list.Reversed(),我得到的错误。

感谢您的帮助

回答

16

var reversed = myList.Reverse()应该做的伎俩。

编辑:

修正 - 作为OP发现,List.Reverse工作在原地的,不像Enumerable.Reverse。因此,答案仅仅是myList.Reverse(); - 您不会将其分配给新变量。

+1

我得到一个错误:“...不能将void分配给隐式类型的局部变量...” – Richard77

+0

我的歉意,我忘记了有一个List.Reverse-我的例子假定IEnumerable。这实际上很让人困惑 - Enumerable.Reverse(扩展方法)返回颠倒的枚举。 List.Reverse在原地反转元素,这就是你所看到的。 –

+0

为什么downvote? –

6

Is there any function that allows me to display them in reverse order, i.e.

这取决于您是否想要将它们颠倒过来,或者只是产生与底层序列相反的值序列而不更改列表。

如果是前者,只需使用List<T>.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;

+0

我收到一个错误:“......不能将void分配给隐式类型局部变量......” – Richard77

+0

我不认为你是因为我没有分配给任何隐式类型局部变量。请再试一次。请注意,我提供了两种方法。一个使用'List .Reverse',另一个使用'Enumerable.Reverse'。 – jason

+0

您也可以使用'myList.AsEnumerable()。Reverse()'语法。 –

-1

做一个foreach循环在列表<Location>相反,你应该使用:

foreach (Location item in myList.Reverse().ToList()) 
{ 
    // do something ... 
} 

的.Reverse()是就地逆转;它不会返回一个新的列表。 .Reverse()之后的.ToList()可以做到这一点。

+1

'ToList'甚至不会编译,特别是因为它是一个反向的。它返回'void'。 – Servy