如何正确地检查每个字符串?
我的代码如下:
string[,] screeny_baza = new string[300, 300];
for (int i = 0; i < 299; i++)
{
try
{
string nazwa_screna_pokolei = screeny_baza[0,i]
}
catch { };
}
我看到我想一一做。是否可以更快地忽略不存在或尚未声明的值?我认为它们只是空的。
我的尺寸看起来像是300/300。
X0 X1 X2
Y0 00 10 20
Y1 01 11 21
Y2 02 12 22
并且只想将字符串保存到每个dimesnion中,例如
string [00] = "bird";
string [01] = "bird2";
然后需要循环获取此值(忽略不存在或尚未声明的值)
感谢帮助。
答案 0 :(得分:2)
我不知道多维数组上的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 { };
}
}
答案 1 :(得分:1)
您可以在二维数组上进行eacheach。您甚至可以在LinQ的位置对其进行过滤。
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);
}
答案 2 :(得分: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();
大约需要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]);
}
}
只需1毫秒。
答案 3 :(得分:0)
对于存储,您将使用行和列索引,例如:
screeny_baza[0,0] = "bird";
screeny_baza[0,1] = "bird";
要循环使用值,请使用GetLength(尽管您知道尺寸为常数,但这是一种更灵活的方法):
for (int row = 0; row < screeny_baza.GetLength(0); row++) {
for (int col = 0; col < screeny_baza.GetLength(1); col++) {
if (!string.IsNullOrEmpty(screeny_baza[row,col])) // if there is a value
Console.WriteLine($"Value at {row},{col} is {screeny_baza[row,col]}");
}
}
答案 4 :(得分:0)
我是这类情况的简单帮手
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);
}
}
}
可以修改以使用不同的大小。 用法示例:
double totalProbability = 0;
forEachCell(chessboardSize, (row, col) =>
totalProbability += boardSnapshots[movesAmount][row, col]);
return totalProbability;