在 C# Windows phone 7 中混洗字符串列表 [英] Shuffling string list in C# Windows phone 7
问题描述
我到处都在寻找如何在 C# 中为 Windows Phone 7 打乱/随机化字符串列表.你可以说我仍然是一个初学者,所以这可能超出了我的范围,但我正在写一个简单的应用程序,这是它的基础.我有一个字符串列表,我需要将它们打乱并输出到文本块.我查过一些零碎的代码,但我知道我错了.有什么建议吗?
I've looked everywhere on how to shuffle/randomize a string list in C# for the windows phone 7. I'm still a beginner you could say so this is probably way out of my league, but I'm writing a simple app, and this is the base of it. I have a list of strings that I need to shuffle and output to a text block. I have bits and pieces of codes I've looked up, but I know I have it wrong. Any suggestions?
推荐答案
Fisher-Yates-Durstenfeld shuffle 是一种经过验证且易于实施的技术.这是一个扩展方法,它将对任何 IList
执行就地洗牌.
The Fisher-Yates-Durstenfeld shuffle is a proven technique that's easy to implement. Here's an extension method that will perform an in-place shuffle on any IList<T>
.
(如果您决定要保持原始列表不变并返回一个新的随机列表,或者 作用于 IEnumerable
序列,à la LINQ.)
(It should be easy enough to adapt if you decide that you want to leave the original list intact and return a new, shuffled list instead, or to act on IEnumerable<T>
sequences, à la 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;
}
}
}
这篇关于在 C# Windows phone 7 中混洗字符串列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!