有没有办法使用foreach
循环向后或以完全随机的顺序迭代集合?
用System.Linq
你可以做...
// List<...> list; foreach (var i in list.Reverse()) { }
对于随机顺序,您必须使用list.OrderBy
(另一个Linq扩展)随机排序,然后迭代该有序列表.
var rnd = new Random(); var randomlyOrdered = list.OrderBy(i => rnd.Next()); foreach (var i in randomlyOrdered) { }
正如其他答案所提到的,Reverse()
扩展方法将允许您以相反的顺序枚举序列.
这是一个随机枚举扩展方法:
public static IEnumerableOrderRandomly (this IEnumerable sequence) { Random random = new Random(); List copy = sequence.ToList(); while (copy.Count > 0) { int index = random.Next(copy.Count); yield return copy[index]; copy.RemoveAt(index); } }
您的用法是:
foreach (int n in Enumerable.Range(1, 10).OrderRandomly()) Console.WriteLine(n);