随机化列表的元素<>

时间:2011-10-27 07:09:40

标签: c# .net collections

  

可能重复:
  Randomize a List<T> in C#

我们假设我有

List<SomeClass> _myList;

我用有序的对象集合填充_myList。现在,我想洗他们。怎么样?

我在考虑使用

_myList.Sort( (a,b) => r.GetNext() - 0.5 );

但我想这只适用于Sort()的一些实现。

BTW,r = new Random();

BTW2,我的名单是千元大...

3 个答案:

答案 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]];
}