C# 多维foreach循环

C# 多维foreach循环,c#,dimensions,C#,Dimensions,我如何才能正确地对每个字符串执行检查 我的代码如下所示: string[,] screeny_baza = new string[300, 300]; for (int i = 0; i < 299; i++) { try { string nazwa_screna_pokolei = screeny_baza[0,i] } catch { }; } 例如,只想将字符串保存到每个dimesnion string [00] = "bird";

我如何才能正确地对每个字符串执行检查

我的代码如下所示:

string[,] screeny_baza = new string[300, 300];
for (int i = 0; i < 299; i++)
{
    try
    {
        string nazwa_screna_pokolei = screeny_baza[0,i]
    }
    catch { };
}
例如,只想将字符串保存到每个dimesnion

string [00] = "bird";
string [01] = "bird2";
以后需要在循环中获取该值(忽略值)​​不存在或尚未声明的)


谢谢您的帮助。

我不知道多维数组上的foreach循环,但您可以随时执行以下操作:

string[,] screeny_baza = new string[300, 300];
for (int x = 0; x < screeny_baza.GetLength(0); x++)
{
    for (int y = 0; y < screeny_baza.GetLength(1); y++)
    {
        try
        {
            string nazwa_screna_pokolei = string.empty;
            if (screeny_baza[x, y] != null)
                nazwa_screna_pokolei = screeny_baza[x, y];
        }
        catch { };
    }
}
string[,]screeny_baza=新字符串[300300];
对于(intx=0;x
我不知道多维数组上的foreach循环,但您始终可以这样做:

string[,] screeny_baza = new string[300, 300];
for (int x = 0; x < screeny_baza.GetLength(0); x++)
{
    for (int y = 0; y < screeny_baza.GetLength(1); y++)
    {
        try
        {
            string nazwa_screna_pokolei = string.empty;
            if (screeny_baza[x, y] != null)
                nazwa_screna_pokolei = screeny_baza[x, y];
        }
        catch { };
    }
}
string[,]screeny_baza=新字符串[300300];
对于(intx=0;x
对于存储,您将使用行和列索引,如:

screeny_baza[0,0] = "bird";
screeny_baza[0,1] = "bird";
对于使用GetLength循环值(虽然您知道维度是常量,但这是一种更灵活的方法):

for(int row=0;row
对于存储,您将使用行和列索引,如:

screeny_baza[0,0] = "bird";
screeny_baza[0,1] = "bird";
对于使用GetLength循环值(虽然您知道维度是常量,但这是一种更灵活的方法):

for(int row=0;row
您可以在二维阵列上进行foreach。你甚至可以在哪里过滤它

var table = new string[20, 20];
table[0, 0] = "Foo";
table[0, 1] = "Bar";

foreach (var value in table.Cast<string>().Where(x =>!string.IsNullOrEmpty(x))) {
    Console.WriteLine(value);
}
var表=新字符串[20,20];
表[0,0]=“Foo”;
表[0,1]=“条形图”;
foreach(table.Cast()中的var值,其中(x=>!string.IsNullOrEmpty(x))){
控制台写入线(值);
}

您可以在二维阵列上进行foreach。你甚至可以在哪里过滤它

var table = new string[20, 20];
table[0, 0] = "Foo";
table[0, 1] = "Bar";

foreach (var value in table.Cast<string>().Where(x =>!string.IsNullOrEmpty(x))) {
    Console.WriteLine(value);
}
var表=新字符串[20,20];
表[0,0]=“Foo”;
表[0,1]=“条形图”;
foreach(table.Cast()中的var值,其中(x=>!string.IsNullOrEmpty(x))){
控制台写入线(值);
}

实际上,try-catch块不会引发任何异常,因为在构造数组时:

string[,] screeny_baza = new string[300, 300];
只要索引在范围内,就可以对其进行索引;因此,声明:

string nazwa_screna_pokolei = screeny_baza[0,i];
将无错误地执行。只有nazwa_screna_pokolei将无效

另外,如果考虑速度,嵌套for循环比LinQ快得多。至少对于这个简单的检查。例如:

var list = screeny_baza.Cast<string>().Where(x => !string.IsNullOrEmpty(x)).ToList();
var list=screeny_baza.Cast().Where(x=>!string.IsNullOrEmpty(x)).ToList();
大约需要10毫秒,但是

for (int i = 0; i < 300; i++)
{
    for (int j = 0; j < 300; j++)
    {
        if (string.IsNullOrEmpty(screeny_baza[i,j]))
        {
            continue;
        }
            list.Add(screeny_baza[i, j]);
    }
}
for(int i=0;i<300;i++)
{
对于(int j=0;j<300;j++)
{
if(string.IsNullOrEmpty(screeny_baza[i,j]))
{
继续;
}
添加(screeny_baza[i,j]);
}
}

只需1毫秒。

实际上,try-catch块不会引发任何异常,因为在构建阵列时:

string[,] screeny_baza = new string[300, 300];
只要索引在范围内,就可以对其进行索引;因此,声明:

string nazwa_screna_pokolei = screeny_baza[0,i];
将无错误地执行。只有nazwa_screna_pokolei将无效

另外,如果考虑速度,嵌套for循环比LinQ快得多。至少对于这个简单的检查。例如:

var list = screeny_baza.Cast<string>().Where(x => !string.IsNullOrEmpty(x)).ToList();
var list=screeny_baza.Cast().Where(x=>!string.IsNullOrEmpty(x)).ToList();
大约需要10毫秒,但是

for (int i = 0; i < 300; i++)
{
    for (int j = 0; j < 300; j++)
    {
        if (string.IsNullOrEmpty(screeny_baza[i,j]))
        {
            continue;
        }
            list.Add(screeny_baza[i, j]);
    }
}
for(int i=0;i<300;i++)
{
对于(int j=0;j<300;j++)
{
if(string.IsNullOrEmpty(screeny_baza[i,j]))
{
继续;
}
添加(screeny_baza[i,j]);
}
}

只需1毫秒。

我的简单助手适用于此类情况

    private static void forEachCell(int size, Action<int, int> action)
    {
        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
            {
                action(j, i);
            }
        }
    }

我的简单助手处理此类案件

    private static void forEachCell(int size, Action<int, int> action)
    {
        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
            {
                action(j, i);
            }
        }
    }

两个维度将使用嵌套在另一个维度内部的循环。当然,您可以在执行操作之前检查它是否为null。也许有更好的方法来声明类似于它的变量以更快地获取值?当我只为[150150]设置值时,它将检查每个维度,是否可以只检查声明的值?说真的,现在不要担心速度。因为循环很快。如果你正在经历明显的减速,可能是其他原因。不要担心过早优化!我不知道问题是,还是,或者是因为这个问题,我想看看你是否可以使用锯齿数组。然后每行可以有一个foreach循环。两个维度将使用嵌套在另一个维度中的循环。当然,您可以在执行操作之前检查它是否为null。也许有更好的方法来声明类似于它的变量以更快地获取值?当我只为[150150]设置值时,它将检查每个维度,是否可以只检查声明的值?说真的,现在不要担心速度。因为循环很快。如果你正在经历明显的减速,可能是其他原因。不要担心过早优化!我不知道问题是,还是,或者是因为这个问题,我想看看你是否可以使用锯齿数组。然后每行可以有一个
foreach
循环。你可以。@DragandDrop我似乎无法建立连接。“你能做什么?”菲尔多说,“我不知道在多维空间上如何使用ach。”。