【问题标题】:Randomizing a string [duplicate]随机化一个字符串[重复]
【发布时间】:2013-09-07 13:08:32
【问题描述】:

我是 C# 新手,所以不要因为我的愚蠢而责备我。 我正在开发一个应用程序,它应该随机化一个单词并赋予它长度,例如你写一个单词“Line”,它会给你“iLen”。 目前我确信只有这部分有效:

    private void lenght_Click(object sender, EventArgs e)
    {
        String word = textBox1.Text;
        int x = word.Length;
        MessageBox.Show(x.ToString());
    }

    private void randomize_Click(object sender, EventArgs e)
    {
        String word = textBox1.Text;
        int x = word.Length;


    }

我尝试了很多,但大多数都只是让应用程序崩溃,所以现在我 想知道 Text.ToCharArray 做了什么,我希望得到额外的支持。 所以我只需要一种方法,将你的字符串随机化,它会为你提供另一个带有混合/随机字符的字符串。 现在我将把问题留 5 到 7 个小时,以便稍后获得更多答案,我将全部复习并为工作中的人提供代表。谢谢你的支持! 我已经阅读了您的所有评论,但很抱歉,现在是时候检查所有内容了。

【问题讨论】:

  • 到目前为止,您已经了解了如何在消息框中显示字符串的长度。你有什么尝试随机化这个词?您是否查看过文档以了解 ToCharArray 的作用?你对这个问题做过任何研究吗?
  • 我是 C# 新手,所以不要责怪菜鸟。我们从不这样做!
  • 您可以使用与here 所述相同的算法来生成列表。将您的字符串转换为字符列表,运行随机播放,然后将结果转换回字符串。

标签: c# string random


【解决方案1】:

Randomize 方法(来自another SO question):

public static T[] Randomize<T>(T[] source)
{
    List<T> randomized = new List<T>();
    List<T> original = new List<T>(source);
    Random r = new Random();
    for (int size = original.Count; size > 0; size--)
    {
        int index = r.Next(size);
        randomized.Add(original[index]);
        original[index] = original[size - 1];
    }
    return randomized.ToArray();
}

及用法:

string text = "Line";

string randomized = new string(Randomize(text.ToCharArray()));

【讨论】:

  • 你可以从这段代码中做一个很好的扩展方法。
  • 这对于大型列表将非常低效,因为RemoveAt 是一个 O(n) 操作。如果数组大小适中,则生成的 O(n^2) 算法将花费很长时间。你最好只创建一个List&lt;T&gt; 并使用Fisher-Yates shuffle
  • @JimMischel 我已经更新了我的答案。现在应该好多了。
  • 这行得通,但你可以在没有第二个列表的情况下做到这一点。只需修改 original 列表(交换项目)并返回它。
  • @JimMischel 添加到 Jim 的评论中,如果您不想改变原始文件,请将其复制 一次 到新数组中。因为它是您将数组复制到一个列表,然后将该列表复制到另一个列表,然后将该列表复制到一个新数组。另请注意,如果您要将输入复制到数组中,不妨将其作为IEnumerable&lt;T&gt; 接受,以使调用者更轻松。只需要一份,而不是三份。另请注意,正确的术语是“改组”而不是“随机化”。
【解决方案2】:
Random rand = new Random();
var output = new string(input.OrderBy(x => rand.Next()).ToArray());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 2010-09-28
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多