對不起,我回答我自己的快樂(在JavaScript - 可運行在Chrome瀏覽器開發工具):
function SuperMatrix() {
this.ranks = [].slice.call(arguments);
this.rankCount = this.ranks.length;
this.arraySize =
this.ranks.reduce(function(a,b) { return a*b; }, 1);
this.dimensionSize = [];
this.dimensionSize[this.rankCount-1] = 1;
for (var i = this.rankCount-2; i >= 0; i -= 1) {
this.dimensionSize[i] =
this.dimensionSize[i+1]*this.ranks[i+1];
}
this.array = new Array(this.arraySize);
}
SuperMatrix.prototype._index = function() {
var indexes = [].slice.call(arguments);
if (indexes.length !== this.rankCount)
throw new Error('invalid number of indexes');
var index = 0;
for (var i = 0; i < this.rankCount; i += 1) {
index += indexes[i]*this.dimensionSize[i];
}
if (index < 0 || index >= this.arraySize)
throw new Error('invalid index: ' + indexes.join(', '));
return index;
}
SuperMatrix.prototype.get = function() {
var index = this._index.apply(this, arguments);
return this.array[index];
};
SuperMatrix.prototype.set = function(value) {
var indexes = [].slice.call(arguments, 1);
var index = this._index.apply(this, indexes);
this.array[index] = value;
return value;
};
var foo = new SuperMatrix(2,3,5);
for (var i = 0; i < 2; i+=1) {
for (var j =0; j < 3; j+=1) {
for (var k = 0; k < 5; k+= 1) {
foo.set([i,j,k].join(':'), i,j,k);
}
}
}
for (var i = 0; i < 2; i+=1) {
for (var j =0; j < 3; j+=1) {
for (var k = 0; k < 5; k+= 1) {
console.log(foo.get(i,j,k));
}
}
}
console.log(foo);
對於高維指標:當1指數的增加必須通過子數組的大小在支持數組移動。
您的尺寸是否始終大小相同?換句話說,是一個二維數組總是_N x N_和一個5維數組_N x N x N x N x N_?或者2D數組可以是_N x M_? – pathfinderelite
第二種情況是正確的。每個尺寸可以是不同的尺寸。 –
爲什麼不在數組中實際插入數組,有效地創建多維數組?這樣做額外的內存開銷可以忽略不計,然後實現變得微不足道。你可以做'int value = arr [4] [2] [87] [5]'而不是'int value = arr.indexof(4,2,87,5)'。 – MarcG