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