Как насчет того, чтобы что-то основывать на Dictionary<System.Drawing.Point, string>
? Так что вы можете написать;
stringGrid.Add(new Point(3,4), "Hello, World!");
Создайте класс, содержащий такой словарь, и тогда вы получите то, что ищете, почти бесплатно. Что-то вроде (не проверено)
class StringGrid
{
Dictionary<System.Drawing.Point, string> grid;
public StringGrid
{
this.grid = new Dictionary<System.Drawing.Point, string>();
}
public string Get(int x, int y)
{
string result = null;
grid.TryGetValue(new Point(x,y), out result);
return result;
}
public void Set(int x, int y, string content)
{
var pos = new Point(x,y);
if (grid.ContainsKey(pos))
{
if (content == null)
{
// no content, so just clear the cell.
grid.remove(pos);
}
else
{
// add new content
grid[pos].Value = content;
}
}
else if (content != null)
{
// new non-null content
grid.add(pos, content);
}
}
}
РЕДАКТИРОВАТЬ: Кроме того, если вы хотите получить действительно вспышку;
- заменить словарь на
SortedList<,>
- замените
System.Drawing.Point
вашей собственной структурой, которая реализует IComparable
Таким образом, список будет внутренне упорядочен по строкам, а затем по столбцам, делая простой цикл foreach
, достаточный для перебора всех значений в первой строке, затем значений во второй и т. Д. Позволяет конвертировать в и `IEnumerable`` - или коллекцию строк.