如何迭代多维字符串数组?

时间:2015-01-06 13:17:19

标签: c# .net arrays

我有一个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?怎么了?

6 个答案:

答案 0 :(得分:5)

foreachstring[,]进行交互,就像是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();