我有一个2d字符串数组(至少我认为它被称为2d数组):
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
?怎么了?
答案 0 :(得分:5)
foreach
与string[,]
进行交互,就像是string[]
一样。它不会分成行。
如果你想要处理&#39;行&#39;和&#39;列&#39;那些单独的,您必须使用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);
}
答案 1 :(得分:2)
这就是你需要的
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);
}
}
答案 2 :(得分:1)
使用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);
}
答案 3 :(得分:0)
下面:
foreach (var row in target)
你已经拥有了你的二维数组的第一个元素,并且foreach接受了这些元素的所有字符
答案 4 :(得分:0)
嗯......字符串是字符数组。
这种混淆是你使用关键字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 ......摆脱变种!!!
答案 5 :(得分:0)
对于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();