Поскольку вы перебираете все элементы независимо от строки или столбца, вы должны превратить ваш зубчатый массив в структуру данных первого класса и реализовать IEnumerable
для перебора коллекции с использованием foreach
.Одна и та же структура данных первого класса может поддерживать индексаторы с одним и двумя аргументами, проверку диапазона и т. Д.
Редактировать:
Вот один из подходов к использованию абстракциивместо манипулирования низкоуровневыми структурами данных.Это предполагает, что зубчатый массив был размещен в другом месте.В любом случае, суть в том, что теперь мы можем использовать foreach
непосредственно в структуре данных:
public class JaggedArray : IEnumerable<int>
{
private int[][] array;
public JaggedArray(int[][] array)
{
this.array = array;
}
public int this[int row, int column]
{
get { return array[row][column]; }
set { array[row][column] = value; }
}
public IEnumerable<int[]> Rows
{
get { return array; }
}
public IEnumerator<int> GetEnumerator()
{
foreach (var row in array)
foreach (var item in row)
yield return item;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}