繁体   English   中英

C#:如何有效地调用多个“ for循环”

[英]C#: How to invoke multiple 'for loops' efficiently

使用C#作为我的语言,我需要创建多个使用带有字符串的数组的for循环。 我什至可能在代码中使用了10个for循环,但是我知道有一种更好的方式来运行多个for循环,而无需手动编写50个for循环,这可能是捷径,

**我想完成的事情:
我想以一系列可能性来打印array [],例如array []的所有可能性:array [0],array [0],array [1],array [0],array [1],array [2]等等。我想要一个小程序,将所有组合打印在一个数组中

这是我效率低下的代码:

string[] array = new string[] { "and", "nand", "not", "or", "nor", "xor" };

        for (int i = 0; i < array.Length; i++) 
        {
            string test = array[i];

            Debug.WriteLine(array[i]);
        }

        for (int i = 0; i < array.Length; i++)
        {
            string test = array[i];

            Debug.WriteLine(array[i]);
        }

        for (int i = 0; i < array.Length; i++)
        {
            string test = array[i];

            Debug.WriteLine(array[i]);
        }

我如何缩短此时间,以便运行x个“ for循环”? 在这种情况下,需要将3个for循环变成1个大的for循环? 进行循环x次数。

使用嵌套的循环

int n = 3; // how many times you want to run it for
for (int j = 0; j < n; j++) {
    for (int i = 0; i < array.Length; i++) 
     {
         string test = array[i];

         Debug.WriteLine(array[i]);
     }
}

为了进一步改善代码,您甚至不需要string test = array[i]; 您可以使用像布林迪的答案一样的foreach循环

您的意思是:

for(int repeat=0; repeat<3; ++repeat)
    for(int i=0; i<array.Length; ++i)  
        Debug.WriteLine(array[i]);

甚至更好,没有笨拙的索引编制:

for(int repeat=0; repeat<3; ++repeat)
    foreach(var line in array)
        Debug.WriteLine(line);

您问题中的代码将更有效地编写为

using System.Linq;

var strings = new[] { "and", "nand", "not", "or", "nor", "xor" };

foreach (var s in strings.Repeat(3).SelectMany(s => s)) 
{
    Debug.WriteLine(s);
}

如果循环不相互作用并且实际执行顺序不重要,并且如果活动足够复杂,则可以执行以下操作:

var loops = Enumerable.Range(1, 3).Select(i =>
   {
       foreach (var s in strings)
       {
           Debug.WriteLine(s);
       }

       Task.FromResult(true);
   });

Task.WhenAll(loops).Wait();

我想这就是你想要的。

string[] array = new string[] { "and", "nand", "not", "or", "nor", "xor" };

for (var i = 0; i < array.Length; i++)
{
    for (var j = 0; j < i;  j++)
    {
        Debug.Write(array[j]);
    }
    Debug.WriteLine();
}

这将打印:

and
and nand
and nand not
...

仅遵循帖子中的信息,这就是您想要的代码

public void Strange(string[] array)
{
    Debug.Assert(array.Length > 1);
    for (var i = 1; i < array.Length; i++)
        foreach (var item in array.Take(i))
            Debug.WriteLine(item);
}

但是它不会提供诸如array[0], array[2], array[3], etc. (跳过array[1] )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM