Я везде искал, как перемешать / рандомизировать список строк на C # для Windows Phone 7. Я все еще новичок, можно сказать, это, вероятно, выход за рамки моей лиги, но я пишу простое приложение, и это его основа. У меня есть список строк, которые мне нужно перетасовать и вывести в текстовый блок. У меня есть фрагменты кода, которые я искал, но я знаю, что ошибаюсь. Какие-либо предложения?
Перемешивание списка строк в C # Windows phone 7
comment
stackoverflow.com/search?q=%5Bc%23%5D+shuffle
- person dtb   schedule 08.04.2011
comment
Если вам не нужно, чтобы перемешивание было случайным, можно просто вернуть strings.OrderBy (s = ›s.GetHashCode ()); ;)
- person Morten Mertner   schedule 08.04.2011
comment
возможный дубликат C #: использует Random и OrderBy хорошим алгоритм перемешивания?
- person Jon   schedule 08.04.2011
Ответы (1)
перемешивание Фишера-Йетса-Дюрстенфельда - это проверенный метод, который легко реализовать. Вот метод расширения, который выполнит перемешивание на месте для любого 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;
}
}
}
person
LukeH
schedule
08.04.2011
Теперь, как бы вы подобрали случайную строку из списка в текстовый блок?
- person Christian; 08.04.2011
Если вам нужна только одна случайная строка, возможно, вам вообще не нужно перемешивать список; просто выберите случайную строку из существующего списка:
var rng = new Random(); yourTextBlock.Text = yourStringList[rng.Next(yourStringList.Length)];
- person LukeH; 08.04.2011