我以(a,b)的形式设置为
(2,4)(1,3)(4,5)(1,2)
给出类似< 2,1>的列表。我想找到列表中有2或1作为第一个元素的所有集合,在这种情况下(2,4)(1,3)(1,2)并从它们获得最大值(b)...这种情况将是4。
如何尽快做到最好?
我的第一个方法是,从集合中获取所有内容并使用< 2,1>对它们进行交集。然后在集合中执行所有b的最大值....但是这对于大集合来说不会很好地扩展。 另外,如果需要,我们也可以改变数据结构,或者如果它有帮助就做任何预处理......
即时通讯使用普通的javascript,我将它们作为元组的数组或具有2个属性的对象int,int
感谢任何建议
答案 0 :(得分:0)
以下是两种简单的方法,一种使用for循环,另一种使用reduce。
function findMax (list,filter) {
let max = 0;
for (let [key,val] of list) {
if (filter.includes (key))
max = Math.max (max, val)
}
return max;
}
function findMax2 (list, filter) {
const toMax = (max,[key,val]) => Math.max (filter.includes(key) * val, max);
return list.reduce (toMax, 0);
}
const data = [
[2, 4],
[1, 3],
[4, 5],
[1, 2]
]
const filter = [1, 2];
console.log(findMax(data, filter))
console.log(findMax2(data, filter))