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

时间:2018-03-22 09:24:48

标签: c# arrays string foreach jagged-arrays

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

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

6 个答案:

答案 0 :(得分:2)

锯齿状数组是一个数组数组 - 这意味着你必须有嵌套循环:

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的支票,以避免在控制台中写入空行。

答案 1 :(得分:1)

尝试使用此代码更新代码以循环遍历数组中的每个数组条目:

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

答案 2 :(得分:1)

您的i本身是一个字符串数组,因此Tostring()返回默认实现的结果。您需要另一个循环来获取真实数据项

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

答案 3 :(得分:1)

Jagged数组是一个数组数组,因此您需要第二个嵌套循环。

第二个循环可以是显式的,或隐藏在某些方法中,该方法循环传递给它的条目。例如,string.Join会将来自锯齿状行的所有字符串组合成单个字符串以进行打印:

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

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

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

答案 4 :(得分:0)

如果要打印所有数组中的所有字符串,而不是异常:

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

答案 5 :(得分:0)

Console.WriteLine(I [0]的ToString());