2016-09-19 188 views
0

我正在做一个简单的C#练习。问题是我要显示输出,例如:C# - 嵌套循环

输出

样品1 =>一个

样品2 => b

样品1 => C^

样品2 => d

样品1 => e

样品2 =>˚F

这里的输入1:

Sample 1 => 
Sample 2 => 

这里的输入2:

a 
b 
c 
d 
e 
f 

这是我的代码

foreach (string input1 in RichTextBox1.Lines) 
{ 
    foreach (string input2 in RichTextBox2.Lines) 
    { 
     RichTextBox3.Text += input1 + input2 + Environment.NewLine; 
    } 
} 

但它没有工作。任何人都可以帮助我。谢谢你..

+0

我不认为你需要一个嵌套循环,也许一个int翻转记住'input1'的位置很好 – Prisoner

+1

_“它不工作”_是一个无用的非特定问题描述,尤其是考虑到缺乏一个很好的[mcve],可以可靠地再现你的任何问题。 –

回答

3

您可以尝试使用模(%),并使用RichTextBox2.Lines作为外部循环。

for (int i=0; i<RichTextBox2.Lines.Length; i++) 
{ 
    var length = RichTextBox1.Lines.Length; 
    RichTextBox3.Text += RichTextBox1.Lines[(i%length)] + RichTextBox2.Lines[i] + Environment.NewLine; 
} 

看起来很复杂,但模给你你想要的东西,即使是有样品3,样品4,依此类推。

0

你的问题是,你循环你的第二个输入...每个第一个输入!再次,一次又一次。

所以:你只需要一个循环这里。下面是一些伪代码开始:

... first check that both line counts are equal 
for (int i=0; i<linecount; i++) { 
    RichTextBox3.Text += input1[i] + input2[i] + Environment.NewLine 
} 

input1[i]基本上转化为:你有你的两个初始框的内容推入例如数组。

3

您需要两个序列的相应元素。所以,你可以很容易地使用LINQ的Zip方法来实现这一结果是这样的(同样通过使用String.Join方法,我们没有使用任何循环。):

richTextBox3.Text = String.Join(Environment.NewLine, 
        Enumerable.Repeat(richTextBox1.Lines, richTextBox2.Lines.Count()) 
        .SelectMany(c => c).Zip(richTextBox2.Lines, (f, s) => f + " => " + s)); 
+0

opps,你的代码绝对没问题。刚刚检查.... –

1

这里是会给你所期望的输出代码:

int i = 0; 
foreach (var input2 in RichTextBox2.Lines) 
{ 
    string input1 = RichTextBox1.Lines[i % RichTextBox1.Lines.Length]; 
    RichTextBox3.Text += input1 + input2 + Environment.NewLine; 
    i++; 
}