在JavaScript中存储/读取大型矩阵的最佳方法是什么?

时间:2017-01-18 09:13:25

标签: javascript node.js

我有10000个项目,我需要创建一个10000行* 10000列的矩阵。如果我使用一维数组,那么它将是巨大的。 此外,我想将一些值设置为单元格(i,j),其中0 <0。 i,j&lt; 10000,所以这将是很多迭代。

我无法想出任何想法。 那么在node / javascript中执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

所有示例都代表以下矩阵,其中0表示无值:

| - - - - - - - |
| 0 | 0 | 2 | 4 |
| - - - - - - - |
| 1 | 0 | 0 | 3 |
| - - - - - - - |
| 0 | 2 | 4 | 6 |
| - - - - - - - |
| 5 | 0 | 2 | 0 |
| - - - - - - - |

如果您需要内存中的所有单元格,那么您需要保留10,000 x 10,000大小的2D阵列,我不会看到它的方法。

选项1示例(行和列基于零):

var matrix = [[0,0,2,4],[1,0,0,3],[0,2,4,6],[5,0,2,0]];

如果没有,您可以保留一维数组,例如使用xy属性指向给定单元格的对象。

选项2示例(为简单起见,row&amp; cols为1):

var matrix = [
    {x: 3, y: 1, value: 2},
    {x: 4, y: 1, value: 4},
    {x: 1, y: 2, value: 1},
    {x: 4, y: 2, value: 3},
    {x: 1, y: 3, value: 2},
    {x: 2, y: 3, value: 4},
    {x: 3, y: 3, value: 6},
    {x: 1, y: 4, value: 5},
    {x: 3, y: 4, value: 2}
];

如果您需要快速搜索&amp;访问时,您可以使用object,其中对象属性名称例如是row索引,并且每个属性值都是具有column索引作为属性的对象,它们的值是单元格值。 请注意,对象属性是表示数字的字符串,因为数字不能用作属性名称。

选项3示例(为简单起见,row&amp; cols为1):

var matrix = {
    '1': {
        '3': 2,
        '4': 4
    },
    '2': {
        '1': 1,
        '4': 3
    },
    '3': {
        '2': 2
        '3': 4,
        '4': 6
    },
    '4': {
        '1': 5,
        '3': 2
    }
};

// Get value of cell (col: 3, row: 4)
console.log(matrix['4']['3']);
// Set value of cell (col: 2, row: 3)
matrix['3']['2'] = 100;

// Check if cell (col: 1, row: 1) has value
var hasValue = matrix['1'] !== undefined && matrix['1']['1'] !== undefined;