如何将向量存储为地图的键[重复]

问题描述 投票:0回答:2

我想记住需要两个 int 的函数的返回结果。我知道我可以将向量转换为字符串,如

1-2
但还有其他方法吗?

我尝试将数组设置为地图,但数组之间没有比较

let map = new Map();

function gridTraveler(m, n){
    if (m === 0 || n === 0)
        return 0;
    if (m === 1 && n === 1)
        return 1;
    if (map.has([m,n]))
        return map.get([m, n]);
    let res = gridTraveler(m-1, n) + gridTraveler(m, n-1);
    map.set([m, n], res);
    return res;
}
javascript dictionary vector hashmap memoization
2个回答
0
投票

要记住函数

gridTraveler
而不将键转换为字符串,您可以将参数序列化为唯一的对象键。

在 JavaScript 中,在映射中用作键的对象或数组是通过其引用进行比较,而不是通过其内容MDN 文档。因此,您需要一种方法来为每对参数生成一致、唯一的对象引用。

这是一种仅保留整数的方法:

  1. 使用嵌套映射:外部映射键为

    m
    ,每个
    m
    映射到另一个映射,其中键为
    n

  2. 检查并设置此两级映射结构中的值。

以下是实施方法:

let map = new Map();

function gridTraveler(m, n) {
    if (m === 0 || n === 0) return 0;
    if (m === 1 && n === 1) return 1;

    if (!map.has(m)) map.set(m, new Map());
    const mMap = map.get(m);

    if (mMap.has(n)) return mMap.get(n);

    let res = gridTraveler(m - 1, n) + gridTraveler(m, n - 1);
    mMap.set(n, res);
    return res;
}

在此版本中,

map
是一个映射,其中每个键都是一个
m
值,每个值是另一个映射(我们称之为
mMap
)。
mMap
具有
n
键并存储结果。这避免了字符串转换的需要并保留了记忆的好处。


-1
投票

如果要使用数组值作为键,则必须保留引用。

const map = new Map();
const key1 = [1,2];
map.set(key1, 3);

地图(1) {数组(2) => 3}

map.get(key1); // works

3

map.get([1,2]);  // not work

未定义

© www.soinside.com 2019 - 2024. All rights reserved.