我们假设我有
List<SomeClass> _myList;
我用有序的对象集合填充_myList。现在,我想洗他们。怎么样?
我在考虑使用
_myList.Sort( (a,b) => r.GetNext() - 0.5 );
但我想这只适用于Sort()
的一些实现。
BTW,r = new Random();
BTW2,我的名单是千元大...
答案 0 :(得分:3)
_myList.OrderBy(item => r.Next());
应该以随机顺序返回列表项目。
答案 1 :(得分:0)
private List<E> ShuffleList<E>(List<E> inputList)
{
List<E> randomList = new List<E>();
Random r = new Random();
int randomIndex = 0;
while (inputList.Count > 0)
{
randomIndex = r.Next(0, inputList.Count); //Choose a random object in the list
randomList.Add(inputList[randomIndex]); //add it to the new, random list
inputList.RemoveAt(randomIndex); //remove to avoid duplicates
}
return randomList; //return the new random list
}
答案 2 :(得分:0)
这是一个想法,以(希望)有效的方式扩展IList。
public static IEnumerable<T> Shuffle<T>(this IList<T> list)
{
var choices = Enumerable.Range(0, list.Count).ToList();
var rng = new Random();
for(int n = choices.Count; n > 1; n--)
{
int k = rng.Next(n);
yield return list[choices[k]];
choices.RemoveAt(k);
}
yield return list[choices[0]];
}