如何使for循环在2个数组值(值对)之间运行,并遍历该数组的所有元素



我想运行一个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

相关内容

  • 没有找到相关文章