我有一个记忆问题。在两个对象之间计算了一个值,我想存储它,这样我可以从对象传入两个数字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。
答案 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;
使用给定键的不同方法。
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;