在C#中迭代数组
本文关键字:数组 迭代 | 更新日期: 2023-09-27 17:51:15
考虑我有许多数组,如下所示:
string[,] op1 = new string[9, 9];
string[,] op2 = new string[9, 9];
string[,] op3 = new string[9, 9];
我该如何迭代如下这样的数组?
int i;
int j;
for(i=0; i<3; i++) {
// Iterate all the above three arrays here
}
我只想通过更改索引来动态迭代以op
开头的所有数组。
我正在使用C#。
您可以动态生成数组并迭代:
string[,] op1 = new string[9, 9];
string[,] op2 = new string[9, 9];
string[,] op3 = new string[9, 9];
foreach (var item in new[] { op1, op2, op3 })
{
//...
}
您可以通过使用params
关键字编写一个方法来变得聪明,该方法将自动为您创建一个数组数组。
要做到这一点,您必须为数组编写一个中间包装类,因为params
关键字只能用于一维数组。
我真的只为好奇的人提供了这个代码——你可能真的不需要在真正的代码中达到这些长度。但是,如果确实发现自己经常想要迭代一组二维数组,则可以使用这种方法。
在编写了(可重复使用的(helper类之后,用于迭代数组的代码将如下所示:
string[,] op1 = new string[9, 9];
string[,] op2 = new string[9, 9];
string[,] op3 = new string[9, 9];
IterateArrays<string>(processArray, op1, op2, op3);
processArray()
方法将沿着以下路线:
static void processArray(string[,] array, int index)
{
Console.WriteLine("Processing array with index " + index);
}
以下是完整的可编译示例:
using System;
namespace ConsoleApp1
{
public class ArrayWrapper<T>
{
public T[,] Array;
public static implicit operator ArrayWrapper<T>(T[,] array)
{
return new ArrayWrapper<T> {Array = array};
}
}
sealed class Program
{
void run()
{
string[,] op1 = new string[9, 9];
string[,] op2 = new string[9, 9];
string[,] op3 = new string[9, 9];
IterateArrays<string>(processArray, op1, op2, op3);
}
static void processArray(string[,] array, int index)
{
Console.WriteLine("Processing array with index " + index);
}
public static void IterateArrays<T>(Action<T[,], int> action, params ArrayWrapper<T>[] arrays)
{
for (int i = 0; i < arrays.Length; ++i)
action(arrays[i].Array, i);
}
static void Main(string[] args)
{
new Program().run();
}
}
}
就像我说的,这只是为了展示你如何处理它。它只是在真实代码中使用@thumbmunkeys建议。
您可以创建一个包含string[,]'s
的list<string[,]>
string[,] op1 = new string[9, 9];
string[,] op2 = new string[9, 9];
string[,] op3 = new string[9, 9];
//Create List, containing `string[,]`
List<string[,]> opList = new List<string[,]>();
//Add String[,]'s to list
opList.Add(op1);
opList.Add(op2);
opList.Add(op3);
//Loop over list
foreach(var itm in opList)
{
//approach string[,]'s here
}
string[,] op1 = new string[9, 9];
string[,] op2 = new string[9, 9];
string[,] op3 = new string[9, 9];
List<string[,]> l = new List<string[,]>();
l.add(op1);
l.add(op2);
l.add(op3);
foreach(string[,] op in l)
{
// iterate over op here
}
或者,如果您不希望额外的行将数组添加到列表中,您可以:
List<string[,]> ops = new List<string[,]>{
new string[9, 9];
new string[9, 9];
new string[9, 9];
}
foreach(string[,] op in ops)
{
// iterate over op here
}
你不能那样做。更简单的方法是将数组添加到List<T>
中,并迭代列表来迭代数组:
List<string[,]> arrays = new List<string[,]>
{
new string[9, 9],
new string[9, 9],
new string[9, 9]
};
foreach(var array in arrays)
{
// Do something with the array...
}
使用:
for(int i=0;i<9;i++)
{
for(int j=0;j<9;i++)
{
// Iterate your string op1,op2,op3 for the desired result.
}
}