嵌套循环以获取每个

时间:2016-04-07 14:26:21

标签: c#

我试图打印一次打印每个值:

像这样。

让我假装对象letters包含"一,二......十"

然后有一个对象numbers包含" 1,2,3,4 ... 10"

现在,如果我想要打印循环:

One 
1 
Two
2 
Three
3

循环如何?

我试过这样:

     foreach (var i in letters)
{
       Console.WriteLine(i);

     foreach(var a in numbers)
        {
            Console.WriteLine(a);
        }
}

但是这会回来:

One 
1
2
Two
1
2
Three
1
2

结果不是我想要的......

如何嵌套循环以使其按照我想要的方式打印?

6 个答案:

答案 0 :(得分:6)

也许您可以使用IEnumerable<T>.Zip(...),参见here,进行组合。

var data = letters.Zip(numbers, (l, n) => new { letter = l, number = n})
foreach (var item in data) {
    Console.Writeline(item.letter);
    Console.Writeline(item.number);
}

答案 1 :(得分:3)

使用forloop insted of foreach像这样使用它

for (int i=0;i<letters.length;i++)
{
  Console.WriteLine(letters[i]);
  Console.WriteLine(numbers[i]);
}

答案 2 :(得分:3)

不要做两个嵌套循环,它们用于枚举来自两个集合的所有可能的对。

相反,在索引上创建一个循环,并将其用于两个集合,或使用LINQ的Zip方法:

foreach (var pair in letters.Zip(numbers, (l, n) => new {Letter=l, Number=n})) {
    Console.WriteLine("{0} - {1}", pair.Letter, pair.Number);
}

答案 3 :(得分:1)

您需要一个循环来迭代这两个列表:

for (int index = 0; index < letters.Count; index++)
{
    Console.WriteLine(letters[index]);
    Console.WriteLine(numbers[index]);
}

这预先假定您的列表长度相同。如果他们不是您,则必须将上限设置为较短列表的长度。

for (int index = 0; index < Math.Min(letters.Count, numbers.Count); index++)

答案 4 :(得分:0)

你关闭 - 第二个循环不应该在第一个循环中,但是你应该使用一个循环迭代两个数组。尝试:

for (int i = 0; i < letters.size(); i++) {
 Console.WriteLine(letters.getItem(i));
 Console.WriteLine(numbers.getItem(i));
}

请注意,这假定使用size()方法返回项目数,使用getItem()方法返回对象中的特定项目。

答案 5 :(得分:0)

正在发生的事情是,每次外部循环运行时,内部循环运行两次。

那是因为你的循环是嵌套的,没有解决这个问题。 如果绝对必须为此使用嵌套循环,则必须检查您的号码是否已打印

类似的东西:

foreach(var i in letters)
{
    Console.WriteLine(i);

    foreach(var a in numbers)
    {
        if (a.isPrinted) //if it has been printed already
        {
            continue; //skip ahead
        }
        else
        {
            Console.WriteLine(a.number);
            a.isPrinted = true;
            break; //stop and jump out of the foreach loop
        }
    }
}

这也意味着每个数字实际上是一个包含bool isPrintedint number的对象 我不会这样做,这是非常低效的 你应该做别人已经建议的事情。