如何遍历多维字符串数组?
How to iterate over a multidimensional string array?
我有一个二维字符串数组(至少我认为它被称为二维数组):
var target = new string[var1,var2];
现在我想把它转换成List<List<string>>
:
var listlist = new List<List<string>>();
foreach (var row in target)
{
var newlist = new List<string>();
foreach (var el in row)
{
newlist.Add(el);
}
listlist.Add(newlist);
}
但是行的类型是 string
,el
的类型是 char
。
我不明白为什么 el
不是 string
?怎么了?
这就是你需要的
static void SoStrList()
{
int var1=10, var2=7;
var target=new string[var1, var2];
var listlist=new List<List<string>>();
for(int i=0; i<var1; i++)
{
var row=new List<string>();
for(int j=0; j<var2; j++)
{
row.Add(target[i, j]);
}
listlist.Add(row);
}
}
A foreach
与 string[,]
交互,就像 string[]
一样。它不会按行拆分。
如果您确实想分别处理 'rows' 和 'columns',您必须使用 GetLength
方法获取数组的维度:
var target = new string[var1, var2];
var listlist = new List<List<string>>();
for (int x = 0; x < target.GetLength(0); x++)
{
var newlist = new List<string>();
for (int y = 0; y < target.GetLength(1); y++)
{
newlist.Add(target[x, y]);
}
listlist.Add(newlist);
}
使用for
循环代替foreach
var target = new string[2, 2];
target[0, 0] = "a";
target[0, 1] = "A";
target[1, 0] = "b";
target[1, 1] = "B";
var listlist = new List<List<string>>();
for (int i = 0; i < target.GetLength(0); i++)
{
var newlist = new List<string>();
for (int j = 0; j < target.GetLength(1); j++)
newlist.Add(target[i,j]);
listlist.Add(newlist);
}
这里:
foreach (var row in target)
您已经有了二维数组的第一个元素,并且 foreach 获取该元素的所有字符
嗯...字符串是字符数组。
这种混淆是您对几乎所有内容都使用关键字 var
所得到的结果。不是 javascript.
其次:你需要做这样的事情
for (int i = 0; i < target.GetLength(0); i++)
{
for (int y = 0; y < target.GetLength(1); y++)
{
your manipulation with strings
}
}
但是 srsly...摆脱 vars!!!
对于 LINQ 爱好者,可以使用以下两行实现相同的目的:
int R = s.GetLength(0), C = s.GetLength(1);
var MyList = Enumerable.Range(0, R).Select(i => i * C).Select(i => s.Cast<string>.Skip(i).Take(C).ToList()).ToList();
我有一个二维字符串数组(至少我认为它被称为二维数组):
var target = new string[var1,var2];
现在我想把它转换成List<List<string>>
:
var listlist = new List<List<string>>();
foreach (var row in target)
{
var newlist = new List<string>();
foreach (var el in row)
{
newlist.Add(el);
}
listlist.Add(newlist);
}
但是行的类型是 string
,el
的类型是 char
。
我不明白为什么 el
不是 string
?怎么了?
这就是你需要的
static void SoStrList()
{
int var1=10, var2=7;
var target=new string[var1, var2];
var listlist=new List<List<string>>();
for(int i=0; i<var1; i++)
{
var row=new List<string>();
for(int j=0; j<var2; j++)
{
row.Add(target[i, j]);
}
listlist.Add(row);
}
}
A foreach
与 string[,]
交互,就像 string[]
一样。它不会按行拆分。
如果您确实想分别处理 'rows' 和 'columns',您必须使用 GetLength
方法获取数组的维度:
var target = new string[var1, var2];
var listlist = new List<List<string>>();
for (int x = 0; x < target.GetLength(0); x++)
{
var newlist = new List<string>();
for (int y = 0; y < target.GetLength(1); y++)
{
newlist.Add(target[x, y]);
}
listlist.Add(newlist);
}
使用for
循环代替foreach
var target = new string[2, 2];
target[0, 0] = "a";
target[0, 1] = "A";
target[1, 0] = "b";
target[1, 1] = "B";
var listlist = new List<List<string>>();
for (int i = 0; i < target.GetLength(0); i++)
{
var newlist = new List<string>();
for (int j = 0; j < target.GetLength(1); j++)
newlist.Add(target[i,j]);
listlist.Add(newlist);
}
这里:
foreach (var row in target)
您已经有了二维数组的第一个元素,并且 foreach 获取该元素的所有字符
嗯...字符串是字符数组。
这种混淆是您对几乎所有内容都使用关键字 var
所得到的结果。不是 javascript.
其次:你需要做这样的事情
for (int i = 0; i < target.GetLength(0); i++)
{
for (int y = 0; y < target.GetLength(1); y++)
{
your manipulation with strings
}
}
但是 srsly...摆脱 vars!!!
对于 LINQ 爱好者,可以使用以下两行实现相同的目的:
int R = s.GetLength(0), C = s.GetLength(1);
var MyList = Enumerable.Range(0, R).Select(i => i * C).Select(i => s.Cast<string>.Skip(i).Take(C).ToList()).ToList();