我正在使用每个循环到锯齿状的字符串数组,以便在其中显示元素,但它不起作用,我已经尝试过这段代码!
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
答案 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());