atr*_*joe 26 c# arrays string random
如何从我的阵列中挑选一个随机字符串,但不要两次选择相同的字符串.
string[] names = { "image1.png", "image2.png", "image3.png", "image4.png", "image5.png" };
Run Code Online (Sandbox Code Playgroud)
这可能吗?我正在考虑使用
return strings[random.Next(strings.Length)];
Run Code Online (Sandbox Code Playgroud)
但这有可能两次返回相同的字符串.或者我错了吗?我应该使用其他类似的东西List来实现这一目标.欢迎任何反馈.
Eti*_*tel 38
最简单的方法(但对于大型列表来说速度慢)可能是使用可调整大小的容器,List并在选择后删除元素.喜欢:
var names = new List<string> { "image1.png", "image2.png", "image3.png", "image4.png", "image5.png" };
int index = random.Next(names.Count);
var name = names[index];
names.RemoveAt(index);
return name;
Run Code Online (Sandbox Code Playgroud)
当您的列表为空时,将选择所有值.
更快的方法(特别是如果你的列表很长)将在你的列表上使用一个改组算法.然后,您可以一次弹出一个值.它会更快,因为从a的末尾移除List通常比从中间移除快得多.至于改组,您可以查看此问题以获取更多详细信息.
小智 30
请尝试以下代码
string[] Titles = { "Excellent", "Good", "Super", "REALLY GOOD DOCTOR!", "THANK YOU!", "THE BEST", "EXCELLENT PHYSICIAN", "EXCELLENT DOCTOR" };
comments_title.Value=Titles[new Random().Next(0,Titles.Length) ] ;
Run Code Online (Sandbox Code Playgroud)
您可以在第一步中对数组进行混洗,然后简单地遍历混洗数组.
这具有与RemoveAt基于实现的O(n ^ 2)相比O(n)的优点.当然,这对于短阵列来说并不重要.
检查Jon Skeet对以下问题的回答(所有订单同样可能)shuffe的实现:使用Random和OrderBy是一个很好的shuffle算法吗?