如何使用两个整数作为键

时间:2017-11-12 15:54:57

标签: javascript collections key

我有一个记忆问题。在两个对象之间计算了一个值,我想存储它,这样我可以从对象传入两个数字id来获取值,而不管我在id中传递的顺序。

我可以将它存储在两个id之下,或者检查两个id,但是如果有更高效的解决方案,我想知道好奇心。

示例:

检查两个id:

var storedValues = {};
function generateValue(a, b)
{
    if (storedValues[a.id][b.id])
        return storedValues[a.id][b.id];
    else if (storedValues[b.id][a.id])
        return storedValues[b.id][a.id];
    else
        // Generate value, store it under a.id and return it
}

将它存储在两个id:

var storedValues = {};
function generateValue(a, b)
{
    if (storedValues[a.id][b.id])
        return storedValues[a.id][b.id];
    else
        // Generate value, store it under a.id and b.id and return it
}

如何从两个数字生成一个唯一的地图密钥,这样我可以用这两个数字检索该值,而不管我传递它们的顺序是什么?

我正在使用JavaScript btw。

2 个答案:

答案 0 :(得分:0)

有很多种方法,首先,你可以为objectkey创建一个单独的键,例如:from django.contrib import admin from myproject.myapp.models import UserProfiles admin.site.register(UserProfiles)

'11_12'

也可以使用嵌套对象:

var storedValues= {};
var id1  = 11;
var id2  = 12;
var calculatedvalue = id1  * id2;
var objectkey = id1+'_'+id2;
storedValues[objectkey] = calculatedvalue;

超过你的ID总是整数,你可以使用数组

var storedValues= {};
var id1  = 11;
var id2  = 12;
var calculatedvalue = id1  * id2;
if (storedValues[id1] == null ){
    storedValues[id1] = {};
}
storedValues[id1][id2] = calculatedvalue;

并且无论顺序如何都返回值:

var storedValuesArr = [];
var id1  = 11;
var id2  = 12;
var calculatedvalue = id1  * id2;
if (!Array.isArray(storedValuesArr[id1])){
    storedValuesArr[id1] = [];
}
storedValuesArr[id1][id2] = calculatedvalue;

答案 1 :(得分:0)

您可以对设置值和获取值的键进行排序。



    if (event.type == sf::Event::MouseWheelScrolled) {
    std::cout << "wheel movement: " << event.mouseWheelScroll.delta << std::endl;
}
&#13;
&#13;
&#13;

使用给定键的不同方法。

&#13;
&#13;
function getValue(object, key0, key1) {
    return [key0, key1]
        .sort((a, b) => a - b)
        .reduce((o, k) => (o || {})[k], object);
}

function setValue(object, key0, key1, value) {
    var keys = [key0, key1].sort((a, b) => a - b),
        last = keys.pop();
    object[keys[0]] = object[keys[0]] || {};
    object[keys[0]][last] = value;
}

var object = {};

setValue(object, 3, 7, 42);
console.log(getValue(object, 3, 7));
console.log(getValue(object, 7, 3));
console.log(object);
&#13;
&#13;
&#13;