我想运行一个for循环,其中它的初始化程序和条件基于整数数组的值。例如:-
int[] array = [0,5,8,12..]
for(initialiser = array[0], condition < array[1], initialiser++)
{
//program condition is satisfied.
break;
}
在第一个循环中,初始化程序是array[0],条件是array[1]
在第二个循环中初始化程序是array[1],条件是array[2]
,依此类推,数组长度不固定。到目前为止,我无法使它有效地工作。这就是我们所尝试的。
int idx = 0;
foreach (int id in oId)
{
if (id != oId.Last())
{
for (int k = 1; k < oCnt; k++)
{
for (int j = id; j < oId[k]; j++)
{
//Logic condition is satisfied vId is an array here
}
}
r[idx++] = vId[0];
}
if (id == oId.Last())
{
for (int j = oId.Last(); j < totalLength; j++)
{
//Logic condition is satisfied vId is an array here
}
r[idx++] = vId[0];
}
}
也许您正在寻找:
var array = new []{0,5,8,12};
for (var i = 0; i < array.Length-1; i++)
{
for (var j = array[i]; j < array[i + 1]; j++)
{
Console.Write(j + " ");
}
Console.WriteLine();
}
输出
0 1 2 3 4
5 6 7
8 9 10 11
你也可以让自己成为一个迭代器方法
public static IEnumerable<(int start, int finish)> GetRange(int[] source)
{
for (var i = 0; i < source.Length - 1; i++)
yield return (source[i], source[i + 1]);
}
这将允许更多可枚举的灵活性
var results = GetRange(array)
.Select(x => string.Join(", ", Enumerable.Range(x.start, x.finish-x.start)));
foreach (var result in results)
Console.WriteLine(result);
输出
0, 1, 2, 3, 4
5, 6, 7
8, 9, 10, 11