随机化字符串数组

本文关键字:数组 字符串 随机化 | 更新日期: 2023-09-27 18:34:56

编辑:这与随机数字无关。当我尝试这样做时,我得到的只是数字,而不是我的字符串。有人至少可以解释一下费舍尔-耶茨洗牌或它是什么,在我的情况下如何工作,如果它确实适用于句子字符串?因为我不明白..我不能是唯一一个不理解它的人吗?

我有一个想要随机化的字符串数组。我想要三个随机字符串,它们不一样,但我在网上找到的所有东西要么是数字,要么是另一种语言。目前我的字符串是随机的,但我有时会得到相同的字符串,例如:"在树后面,在树后面,在树后面"。

所以它应该像 randomHiding1 != randomHide 2 && randomHiding3;(我知道这不是"真正的代码",但只是为了让你明白我的意思(

这是我在这里的第一篇文章,所以我希望这个问题没问题,因为我找不到任何人问关于随机化"句子字符串"的问题,而不仅仅是"abcdefg...."或数字。这是我的代码。提前感谢!

    Random random = new Random();
    // strings with hiding spots
        string[] hidingSpot = {
            "in a ditch",
            "up in a tree",
            "behind a stone",
            "in a hole in the ground",
            "behind a tree",
            "in the shadows" };
        int hidingChoice1 = random.Next(hidingSpot.Length);
        int hidingChoice2 = random.Next(hidingSpot.Length);
        int hidingChoice3 = random.Next(hidingSpot.Length);
        string randomHiding1 = hidingSpot[hidingChoice1];
        string randomHiding2 = hidingSpot[hidingChoice2];
        string randomHiding3 = hidingSpot[hidingChoice3];

顺便说一句,我知道这段代码非常糟糕,而且不必要地长,但我对数组和列表仍然相当陌生,所以我的首要任务是获取有效的代码,而不是短代码等。所以我不需要关于阅读文档的提示,因为我一直在这样做,但由于个人原因,我很难记住事情。我希望这是有道理的。

随机化字符串数组

也许这会帮助你: 费舍尔-耶茨洗牌

一种使用 LINQ 的方法:

Random r = new Random();
string[] hidingSpot = "in a ditch|up in a tree|behind a stone|in a hole in the ground|behind a tree|in the shadows".Split('|');
hidingSpot = hidingSpot.OrderBy(x => r.Next()).ToArray();
string one = hidingspot[0];
string two = hidingspot[1];
string three = hidingspot[2];

最后:

正如Stefan Schmid在另一个答案中提到的,你可以实现Fisher-Yates Shuffle,又名Knuth Shuffle。这里提供了一个实现,我在下面复制粘贴,但所有功劳都归 Jodrell

public static IEnumerable<T> Shuffle<T>(
        this IEnumerable<T> source,
        Random generator = null)
{
    if (generator == null)
    {
        generator = new Random();
    }
    var elements = source.ToArray();
    for (var i = elements.Length - 1; i >= 0; i--)
    {
        var swapIndex = generator.Next(i + 1);
        yield return elements[swapIndex];
        elements[swapIndex] = elements[i];
    }
}

然后,您可以使用以下内容:

hidingSpot = hidingSpot.Shuffle().ToArray();
string one = hidingspot[0];
string two = hidingspot[1];
string three = hidingspot[2];