1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
   | class MDArray<T> where T : new()
{
	T [] data;
	int [] dimensions;
 
	public MDArray(params int [] _dimensions) {
		dimensions = _dimensions;
 
		int total_length = 1;
		foreach (int d in dimensions)
			total_length *= d;
		data = new T [total_length];
	}
 
	public T this [params int [] indexes] {
		get {
			return data [getIndex(indexes)];
		}
		set {
			data [getIndex(indexes)] = value;
		}
	}
 
	private int getIndex(int [] indexes) {
		int index = 0,
			k = 1;
		for (int i = 0 ; i < indexes.Length ; k *= dimensions [i], i++)
			index += indexes [i] * k;
		return index;
	}
} | 
Partager