从数组中选择随机字符串
如何从我的arrays中挑选一个随机字符串,而不是两次选择相同的字符串。
string[] names = { "image1.png", "image2.png", "image3.png", "image4.png", "image5.png" };
这可能吗? 我正在考虑使用
return strings[random.Next(strings.Length)];
但这有可能两次返回相同的字符串。 或者我错了吗? 我应该使用像List
这样的其他东西来实现这一目标。 欢迎任何反馈。
最简单的方法(但对于大型列表来说很慢)将使用像List
这样的可resize的容器,并在选择后删除元素。 喜欢:
var names = new List { "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;
当您的列表为空时,将选择所有值。
更快的方法(特别是如果你的列表很长)将在你的列表上使用一个改组算法。 然后,您可以一次弹出一个值。 它会更快,因为从List
的末尾删除通常比从中间删除要快得多。 至于改组,您可以查看此问题以获取更多详细信息。
请尝试以下代码
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) ] ;
您可以在第一步中对数组进行混洗,然后简单地遍历混洗数组。
与基于RemoveAt
的实现具有的O(n ^ 2)相比,这具有O(n)的优点。 当然,这对于短arrays来说并不重要。
检查Jon Skeet对以下问题的回答是好的(所有订单都同样可能)shuffe的实现: 使用Random和OrderBy是一个很好的shuffle算法吗?
最好的办法就是创建一个重复的列表,然后当你随机挑出一个字符串时,你可以将它从重复列表中删除,这样你就不能选择它两次。
您可以使用的逻辑如下:
1)在等于数组长度的范围内选择一个随机整数。 您可以使用System.Random类执行此操作。
2)使用与该数组索引对应的字符串
3)从数组中删除带有该索引的项目(使用列表可能更容易)
然后你可以再次选择,不会出现相同的字符串。 该数组将是一个较短的元素。
如果您不想/不能修改原始数组,则需要跟踪已使用的数据,最好是在List
。 使用while
循环检查它是否未被使用,然后将其添加到“used”列表中。
//SET LOWERLIMIT cmd = new SqlCommand("select min(sysid) as lowerlimit from users", cs); int _lowerlimit = (int) cmd.ExecuteScalar(); lowerlimit = _lowerlimit; //SET UPPERLIMIT cmd = new SqlCommand("select max(sysid) as upperlimit from users", cs); int _upperlimit = (int) cmd.ExecuteScalar(); upperlimit = _upperlimit; //GENERATE RANDOM NUMBER FROM LOWERLIMIT TO UPPERLIMIT Random rnd = new Random(); int randomNumber = rnd.Next(lowerlimit, upperlimit+1); //DISPLAY OUTPUT txt_output.Text += randomNumber;
使用以下实用程序方法
public static class ListExtensions { public static T PickRandom(this List enumerable) { int index = new Random().Next(0, enumerable.Count()); return enumerable[index]; } }
然后拨打以下方式
上述就是C#学习教程:从数组中选择随机字符串分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
string[] fruitsArray = { "apple", "orange"}; string inputString = fruitsArray.ToList().PickRandom();
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1027640.html