我如何从数组中随机选择一个字符串,但不选择相同的字符串两次。
string[] names = { "image1.png", "image2.png", "image3.png", "image4.png", "image5.png" };
这可能吗?我正在考虑使用
return strings[random.Next(strings.Length)];
但这有可能两次返回相同的字符串。还是我在这件事上错了?我应该使用其他东西,比如List
来实现这一目标。欢迎任何反馈。
最简单的方法(但对于大型列表来说很慢)是使用可调整大小的容器,例如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;
当您的列表为空时,所有值都会被选取。
更快的方法(特别是如果您的列表很长)是在列表上使用洗牌算法。然后您可以一次弹出一个值。它会更快,因为从 a 的末尾删除List
通常比从中间删除要快得多。至于shuffle,你可以看一下这个问题 https://stackoverflow.com/questions/273313/randomize-a-listt-in-c更多细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)