c# - 从字符串数组中随机选择,不重复

标签 c# arrays string random

美好的一天 我在从我的字符串数组中选择一个随机字符串时遇到了一些问题 我目前正在开发一个猜词游戏。 这是我的字符串数组:

 string[] movie = {"deadpool", "batmanvssuperman", "findingdory", "titanic", "suicidesquad", "lordoftherings", "harrypotter", "jurassicpark", "hungergames", "despicableme" };

虽然这是为我的数组选择一个随机字符串的过程,但我接下来应该做什么,因为我想选择不重复的字符串。 例如 当程序启动时,它将选择一个字符串,然后当我再次选择随机字符串时,我不想选择我之前已经选择的前一个单词。

string word = movie[r.Next(0, movie.Length)].ToUpper();

感谢您的回复!祝你有美好的一天。

最佳答案

好吧,只需将您的数组转换为列表并按随机顺序打乱它:

        var rand = new Random();
        string[] movies = { "deadpool", "batmanvssuperman", "findingdory", "titanic", "suicidesquad", "lordoftherings", "harrypotter", "jurassicpark", "hungergames", "despicableme" };
        List<string> randomMovies = movies.ToList();

        for (int i = 0; i < movies.Length / 2; i++)
        {
            var randNum = rand.Next(i, randomMovies.Count);
            var temp = randomMovies[randNum];
            randomMovies[randNum] = randomMovies[i];
            randomMovies[i] = temp;
        }

然后你可以通过以下方式获取随机元素:

var randomMovie = randomMovies.First(); 
randomMovies.Remove(randomMovie); // either remove it or use loop to iterate through the list

我有点喜欢在这里使用队列集合:

var moviesQueue = new Queue<string>(randomMovies);    

while (moviewQueue.Count > 0)
{
    Console.WriteLine(moviewQueue.Dequeue());
}

附言 正如建议的那样,您实际上并不需要从 randomMovie 中删除元素,您可以在某个字段中保存上次使用的索引并稍后使用;

var lastIndex = 0;
var randomMovie = randomMovies[lastIndex++];

关于c# - 从字符串数组中随机选择,不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39641877/

相关文章:

c# - MVC3 工具/插件/插件

arrays - Matlab:将int数组转换为字符串数组?

Java - 我无法用字符串中的另一个字符替换字符 'Á'

java - Java将字符串转为float

string - Tcl在字符串末尾添加一个符号N次

java - 使用正则表达式为 ArrayList 中的变量赋值

java - 如何在 Android 中将颜色整数转换为十六进制字符串?

c# - 如何从 C# 中的代码打开 Windows 设置页面?

c# - 多个数据库的 LINQ 查询 c#

c# - 在 C# winforms 应用程序中使用文本框过滤 Treeview