[英]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.