使用foreach迭代2D数组

时间:2016-01-01 19:27:46

标签: c# multidimensional-array foreach

我试图用这个语句迭代一个数组: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;
} 

3 个答案:

答案 0 :(得分:1)

int [,]不是int []的IEnumerable,而是int。因此,你不能在foreach循环中使用它。此外,您必须使用Array.GetLength()方法来查找每行中的元素数。

main.dart

答案 1 :(得分:1)

这不是解决问题的正确方法。您当前正在使用多维数组(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

答案 2 :(得分:0)

使用列表<> object和Linq使代码变得微不足道

        public static List<int> RowSums(List<List<int>> arr2D)
        {
            return arr2D.Select(x => x.Sum()).ToList();
        }​