C# 如何输出随机行
textbox1 里有若干行数据,如:
111111
222222
333333
444444
555555
要如何将这些数据随机输出到textbox2?例如输出后为如下这种随机的行,不要按顺序输出。
222222
555555
111111
333333
444444
------解决方案--------------------请百度"洗牌算法"
------解决方案--------------------List<string> list=new List<string>();
list.Add("111111");
list.Add("222222");
list.Add("333333");
.......
List<string> resultList=new List<string>();
Random rnd=new Random();
while(list.Count>0)
{
string str= list[rnd.Next(0,list.Count)];
resultList.Add(str);
list.Remove(str);
}
resultList这里面就是随机后的了
------解决方案--------------------其实所谓的随机数,并不是真正的随机数。从概率上来说随机应该是平均分布,而不是正态分布。
以前在CoolShell上看到一篇文章讨论洗牌算法,并列出了几种算法洗牌后,每张牌出现位置的统计,基本谈不上随机。最后给出了一个算法,翻译成C#大概是下面的样子,楼主参考:
static void ShuffleArray_Fisher_Yates(List<string> arr, int len)
{
Random r = new Random(1);
int i = len, j;
string temp;
if (i == 0) return;
while (--i > 0)
{
j = r.Next(100000) % (i + 1);
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
------解决方案--------------------就用Random随机读一行,删除一行!
------解决方案--------------------
VS2008加上一个ToArray()
text2.Text = string.Join("\r\n", text1.Lines.OrderBy(x => Guid.NewGuid().ToString()).ToArray());