Перемешивание списка строк в C # Windows phone 7 - PullRequest
0 голосов
/ 08 апреля 2011

Я везде искал, как перемешать / рандомизировать список строк в C # для Windows Phone 7. Я все еще новичок, вы могли бы сказать, так что это, вероятно, выход из моей лиги, но я пишупростое приложение, и это основа его.У меня есть список строк, которые мне нужно перемешать и вывести в текстовый блок.У меня есть кусочки кодов, которые я посмотрел, но я знаю, что это неправильно.Есть предложения?

1 Ответ

3 голосов
/ 08 апреля 2011

Fisher-Yates-Durstenfeld shuffle - проверенный метод, который легко реализовать.Вот метод расширения, который будет выполнять перемешивание на месте для любого IList<T>.

(адаптация должна быть достаточно простой, если вы решите, что хотите оставить исходный список без изменений и вернуть новый, перемешанный).вместо списка или действуют на IEnumerable<T> последовательностей , а-ля LINQ.)

var list = new List<string> { "the", "quick", "brown", "fox" };
list.ShuffleInPlace();

// ...

public static class ListExtensions
{
    public static void ShuffleInPlace<T>(this IList<T> source)
    {
        source.ShuffleInPlace(new Random());
    }

    public static void ShuffleInPlace<T>(this IList<T> source, Random rng)
    {
        if (source == null) throw new ArgumentNullException("source");
        if (rng == null) throw new ArgumentNullException("rng");

        for (int i = 0; i < source.Count - 1; i++)
        {
            int j = rng.Next(i, source.Count);

            T temp = source[j];
            source[j] = source[i];
            source[i] = temp;
        }
    }
}
...