随机化列表<string>没有重复</string>

时间:2013-08-31 22:11:09

标签: c# xamarin.android

我有一个

List<string> notizen = new List<string>();

我想从中选择一个随机条目,但在显示所有条目的条目之前,不应重复此条目。

应用程序如下所示:

屏幕上显示字符串,点击它,屏幕上显示另一个文本。我想在没有双重条目的情况下随机浏览notizen列表,直到所有条目都显示出来,然后以一个新的随机版本notizen开始。

notizen本身可以随机化,不需要临时列表。但我发现LINQ不存在于monodroid中。

1 个答案:

答案 0 :(得分:0)

您可以使用O(n)中的Fisher–Yates算法随机播放列表;一旦你的迭代器等于n,执行第二次shuffle等等。

维基百科中提供的伪代码是:

To shuffle an array a of n elements (indices 0..n-1):
  for i from n − 1 downto 1 do
   j ← random integer with 0 ≤ j ≤ i
   exchange a[j] and a[i]

您甚至可以为此编写扩展方法,例如:

    public static Random rand = new Random();

    public static List<T> Shuffle<T>(this List<T> original)
    {
        List<T> lst = new List<T>(original);
        for (int i = lst.Count - 1; i >= 1; i--)
        {
            int j = rand.Next(0, i + 1);
            T tmp = lst[j];
            lst[j] = lst[i];
            lst[i] = tmp;
        }
        return lst;
    }

这样您就可以使用

生成随机列表
var shuffled = notizen.Shuffle();