随机化RichTextBox的行

本文关键字:的行 RichTextBox 随机化 | 更新日期: 2023-09-27 18:03:35

嗯,我一直在尝试随机化我的richtextbox的行,它开始困扰我现在,因为我使用随机,但它不工作…当我使用这个时,它会重复一些行多次,而不包括一些…

我已经看过:RichTextBox -排序行随机

但这对我一点帮助也没有。

RichtextBox rtb = new RichTextBox();    
Random R = new Random();
int y;
rtb.Text = "";
for (int i = 0; i < richTextBox1.Lines.Length; i++)
{
   y = R.Next(0, richTextBox1.Lines.Length);
   rtb.Text = rtb.Text + richTextBox1.Lines[y].ToString() + "'r'n";
}
richTextBox2.Text = rtb.Text;

例如我输入

Lorem ipsum dolor sit met, consecent adiping elite。不结盟运动在aliquam enim。在大湖区的Proin。nambibendum, augue non semper毛羽,前体,中间顶,一个卵状体,顶状体,顶状体。菜豆卵双,无舌胚,茎尖处有羽状铜。Sed复发性马蒂斯与子宫内膜炎。炖菜豆伊尼姆,我要和你谈谈。这是一种受欢迎的双重水平tristique。Etiam justo metus, consequat in pellentesque eu, eleifendid nunc。

它给我,

子宫内膜炎与子宫内膜炎。Phasellus颞部布兰德尼姆说:"我认为这是一件好事。"Nam bibendum, augue non永久的穗状花序,在中间的穗状花序,一种卵状花序大笑。子宫内膜炎,子宫内膜炎。Phasellus天时不刻不刻,一时不刻不刻。Sed iaculisPulvinar dui vel tristique。伊提姆只是为了metus,结果在Pellentesque eu, eleifend id nunc。我爱你,我爱你。奉献奉献的精英。Nam in aliquam enim。在lacus的Proin麦格纳。

重复一行,漏了一行…对于较长的文本,它出现的频率更高。

我没有做c#太久,所以抱歉,如果这是简单的。:/

随机化RichTextBox的行

以下是您的伪代码逻辑:

Foreach line in original
Choose a random line
Add it to the output

你从不考虑你已经输出了哪些行,因此不知道下次不要选择它们。

注意,在您提供的链接中,他们建议首先将行提取到一个结构中,然后改变该结构以提供新的排序。这样可以确保每行只写一次。

有几种变换算法,最简单的是:

Select the first item
Select a random line, after or including the previous selection
Swap the two selections
Repeat moving the first selection to the left

Random的意思是"只是"——它将返回一个介于0和(你的富文本框中的行数- 1)之间的数字。没有保证唯一性(事实上这是不太可能的)。

如果你想以唯一的顺序获得它们,你必须跟踪使用过的那些,并且不要再次使用它们。

一个简单的例子(不一定有效)

   List<int> usedLineIndexes = new List<int>();
   while (usedLineIndexes.Count < richTextBox1.Lines.Length)
   {
        int y = R.Next(0, richTextBox1.Lines.Length);
        if (usedLineIndexes.Contains(y))
            continue;   // Try again

        usedLineIndexes.Add(y);
        rtb.Text = rtb.Text + richTextBox1.Lines[y].ToString() + "'r'n";
   }

同样,这是一段未经测试、效率低下的代码,但它会给您一个概念。