不要重复别人的名字

本文关键字:别人 | 更新日期: 2023-09-27 18:01:49

我正在使用c# winforms。当我点击一个按钮时,程序会显示列表中的2个单词,但有时这些单词会重复出现。我怎样做才能不让文字重复

代码

private void button1_Click(object sender, EventArgs e)
{
    var words = new[] { "Worm", "Fast", "Death", "boat", "Sneak", "Destroction" };
    var wordsInRandomOrder = words.OrderBy(i => Guid.NewGuid());
    foreach (var word in wordsInRandomOrder)
    {
        textBox1.Text = word;
        break;
    }
    foreach (var word in wordsInRandomOrder)
    {
        textBox1.Text = textBox1.Text + " " + word;
        break;
    }
}

不要重复别人的名字

选项1:

private void button1_Click(object sender, EventArgs e)
{
    var words = new[] { "Worm", "Fast", "Death", "boat", "Sneak", "Destroction" };
    var wordsInRandomOrder = words.OrderBy(i => Guid.NewGuid()).ToList();
    textBox1.Text = wordsInRandomOrder[0] + " " + wordsInRandomOrder[1];
}

选项2:

var words = new[] { "Worm", "Fast", "Death", "boat", "Sneak", "Destroction" };
Random rd = new Random();
int firstIndex = rd.Next(0, words.Length);
int secondIndex = rd.Next(0, words.Length);
while (secondIndex == firstIndex)
{
    secondIndex = rd.Next(0, words.Length);
}
textBox1.Text = words[firstIndex] + " " + words[secondIndex];

Random rd = new Random();
int firstIndex = rd.Next(0, words.Length);
int secondIndex = rd.Next(0, words.Length);
while (secondIndex == firstIndex)
{
    secondIndex = rd.Next(0, words.Length);
}
textBox1.Text = words[firstIndex] + " " + words[secondIndex];

如果你真的想要保留你正在使用的代码,在第二个foreach中,你可以这样做:

foreach (var word in wordsInRandomOrder)
{
    if(word != textBox1.Text)
    {
       textBox1.Text = textBox1.Text + " " + word;
       break;
    }
}

,但一个更好的选择是juharr写的:

textBox1.Text = string.Join(" ", wordsInRandomOrder.Take(2));

如果你想走循环的路线,最好是加入你有两个"foreach",像这样:

foreach (string word in wordsInRandomOrder)
{
    if(textBox1.Text = "")
    {
        textBox1.Text = word;
    }
    else
    {
        if(textBox1.Text != word)
        {
            textBox1.Text = textBox1.Text + " " + word;
            break;
        }
    }
}

不使用Guid的类似方法:

private void button1_Click(object sender, EventArgs e)
{
    Random r = new Random();
    var words = new[] { "Worm", "Fast", "Death", "boat", "Sneak", "Destroction" };
    var wordsInRandomOrder = words.OrderBy(i => r.Next()).ToList();
    textBox1.Text = String.Join(" ", wordsInRandomOrder.Take(2));
}

使用此方法,即使如果随机化器生成相同的数字两次(这是相当不可能的),您也可以从列表中取出另一个单词,因为它们只是简单地排序。如果两个条目具有相同的order-value,则它们是任意排序的,但是同一条目不会被使用两次。