对锯齿状字符串数组使用 foreach 循环来显示其中的元素?

Using a foreach Loop for a Jagged String Array to display the Elements in it?

我正在为每个循环使用锯齿状字符串数组以显示其中的元素,但它不起作用,我已经尝试过此代码!

public class Program
    {
        public static void Main(string[] args)
        {
            string[][] str = new string[5][];
            str[0] = new string[5];
            str[1] = new string[10];
            str[2] = new string[20];
            str[3] = new string[50];
            str[4] = new string[10];
            //Now store data in the jagged array
            str[0][0] = "Pune";
            str[1][0] = "Kolkata";
            str[2][0] = "Bangalore";
            str[3][0] = "The pink city named Jaipur";
            str[4][0] = "Hyderabad";
            //Lastly, display the content of each of the string arrays inside the jagged array
            foreach(string[] i in str)
                Console.WriteLine(i.ToString());
            Console.ReadKey();
        }
    }

我使用了 foreach 循环,但它正在打印

System.String[]
System.String[]
System.String[]
System.String[]
System.String[]

作为输出.... 所以请给我问题解决方案,因为我必须修改才能使显示显示为

Pune
Kolkata
Bangalore
The pink city named Jaipur
Hyderabad

交错数组是数组的数组 - 这意味着您必须有嵌套循环:

foreach(string[] i in str)
    foreach(string s in i)
         if(!string.IsNullOrEmpty(s))
             Console.WriteLine(s);

另一种选择是使用 linq 的 SelectMany:

foreach(var s in str.SelectMany(s => s).Where(s => !string.IsNullOrEmpty(s)))
{
    Console.WriteLine(s);
}

或者,如果您只想显示每个嵌套数组的第一个单元格:

foreach(string[] i in str)
    var s = i[0];
    if(!string.IsNullOrEmpty(s))
        Console.WriteLine(s);

请注意,我添加了对 String.IsNullOrEmpty 的检查以避免向控制台写入空行。

尝试用这个更新您的代码以遍历数组中的每个数组条目:

 foreach(string[] i in str)
 {
     foreach(string s in i)
     {
       Console.WriteLine(s);
     }
 }

您的 i 本身是一个字符串数组,因此 Tostring() 返回它的默认实现后的结果。您需要另一个循环才能到达真正的数据项

foreach(string[] i in str)
{
  foreach(string j in i)
      Console.WriteLine(j);
}

交错数组是数组的数组,因此您需要第二个嵌套循环。

第二个循环可以是显式的,也可以隐藏在某个循环遍历您传递给它的条目的方法中。例如,string.Join 会将交错行中的所有字符串合并为一个字符串以进行打印:

foreach(string[] row in str)
    Console.WriteLine(string.Join(" ", row));

您也可以使用相同的技术来消除外循环:

Console.WriteLine(string.Join("\n", str.Select(row => string.Join(" ", row))));

如果要打印所有数组中的所有字符串,并且不出现异常:

foreach (string[] i in str)
    foreach (string s in i)
        if (s != null)
            Console.WriteLine(s);

Console.WriteLine(i[0].ToString());