随机化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#太久,所以抱歉,如果这是简单的。:/
以下是您的伪代码逻辑:
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";
}
同样,这是一段未经测试、效率低下的代码,但它会给您一个概念。