使用foreach在2D阵列中迭代
本文关键字:迭代 阵列 2D foreach 使用 | 更新日期: 2023-09-27 18:28:50
我试图用以下语句迭代数组:foreach(arr2D中的int[]arr)。它在Java中的工作原理类似。为什么它在C#中不起作用?谢谢
public static int[] RowSums(int[,] arr2D)
{
int[] sums = new int[arr2D.Length];
int rowCount = 0;
foreach (int[] arr in arr2D)
{
sums[rowSums] = ArraySum(arr);
rowSums++;
}
return sums;
}
int[,]不是int[]的IEnumerable,而是int的IEnumarable。因此,您不能像在foreach循环中那样使用它。此外,您必须使用Array.GetLength()方法来找出每行中的元素数量。
public static int[] RowSums(int[,] arr2D)
{
int numRows = arr2D.GetLength(0);
int numColumns = arr2D.GetLength(1);
int[] sums = new int[numRows];
for (int row = 0; row < numRows; ++row)
{
for (int col = 0; col < numColumns; ++col)
{
sums[row] += arr2D[row, col];
}
}
return sums;
}
使用列表<>对象和Linq使代码成为琐碎的
public static List<int> RowSums(List<List<int>> arr2D)
{
return arr2D.Select(x => x.Sum()).ToList();
}
这不是解决问题的正确方法。您目前使用的是多维数组(int[n,n]
),这些数组没有提供任何处理行或列的方法(假设您使用的是三维数组->行的含义是什么?)。如果要将值作为行进行迭代,则应使用锯齿状数组(int[n][]
)。你的代码会变成类似的东西:
public static int[] RowSums(int[][] arr2D)
{
//declare variables
int[] sums = new int[arr2D.GetLength(0)];
int rowSums = 0;
//loop through array rows
foreach (int[] arr in arr2D)
{
//accumulate row sum
sums[rowSums] = ArraySum(arr);
//update counter
rowSums++;
} //end foreach
return sums;
} //RowSums