在C#中生成随机大写字母,同时检查每个都只生成一对

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C#中生成随机大写字母,同时检查每个都只生成一对相关的知识,希望对你有一定的参考价值。

嗨,我正在尝试用C#编写基本的控制台Pexeso游戏。我想知道如何生成一对且只有一对大写字母。

到目前为止,我的代码可以生成随机大写字母的字符串,但我不知道如何控制它只生成两个,每个只生成两个。

        string chars = "AABBCCDDEEFFGGHHIIJJKKLL";
        var stringChars = new char[24];
        Random random = new Random();

        for (int i = 0; i < stringChars.Length; i++)
        {
            stringChars[i] = chars[random.Next(chars.Length)];
        }

        string finalString = new String(stringChars);

        Console.WriteLine(finalString);

非常感谢您的帮助。

答案

您可以通过在最终序列中定义所需的所有项目来开始。

接下来你要做的就是不要像你现在那样从该列表中获取项目(以一种你可以多次使用它们的方式),而不是实际上想要洗牌。

想象一下,你的信件是打牌,你需要两套。你洗牌,你有一系列扑克牌,每张牌都出现两次。

要改组你的字母或任何给定的序列,你可以使用Fisher-Yates shuffle

像这样的东西应该做的伎俩:

for (int i = chars.Length - 1; i > 0; i--)
{
    char j = random.Next(i + 1);
    int temp = chars[i];
    chars[i] = chars[j];
    chars[j] = temp;
}

现在你不再需要你的finalString:你想要的结果是你的chars阵列。

另一答案

对你的问题一个简单的解决方案是使用LINQ的方法OrderBy随机数:

string chars = "AABBCCDDEEFFGGHHIIJJKKLL";

Random random = new Random();
var shuffled = chars.OrderBy(c => random.Next(chars.Length));

string finalString = new string(shuffled.ToArray());

Console.WriteLine(finalString);

有时您可能会看到人们使用Guid而不是随机数:

string chars = "AABBCCDDEEFFGGHHIIJJKKLL";

var shuffled = chars.OrderBy(c => Guid.NewGuid());

string finalString = new string(shuffled.ToArray());

Console.WriteLine(finalString);

以上是关于在C#中生成随机大写字母,同时检查每个都只生成一对的主要内容,如果未能解决你的问题,请参考以下文章

在shell脚本中生成必须具有特殊字符的随机字符串

在 Python 中生成一个随机字母

如何在Objective-C中生成随机大写字符

在java中生成随机字符串[重复]

在Java中生成字母数字随机字符串[重复]

如何使用 Perl 从一组字母中生成单词列表?