考虑我有以下几个数组:
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#。
答案 0 :(得分:9)
你可以动态制作一个数组并迭代:
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 })
{
//...
}
答案 1 :(得分:2)
您可以通过使用params
关键字编写方法来获得智能,该关键字将自动为您创建数组数组。
为此,您必须为数组编写中间包装类,因为params
关键字只能与单维数组一起使用。
我真的只为好奇者提供这段代码 - 你可能真的不需要在实际代码中使用这些代码。但是,如果您 发现自己经常想要迭代一组二维数组,则可以使用此方法。
在编写(可重用)辅助类之后,迭代数组的代码将如下所示:
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建议。
答案 2 :(得分:1)
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
}
答案 3 :(得分:1)
您可以创建包含list<string[,]>
string[,]'s
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
}
答案 4 :(得分:1)
你不能这样做。更容易将数组添加到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...
}
答案 5 :(得分:-3)
使用:
for(int i=0;i<9;i++)
{
for(int j=0;j<9;i++)
{
// Iterate your string op1,op2,op3 for the desired result.
}
}