在随机一个算法题的时候随机到了一个简单题
这种题有很多解法,一眼如果用多分枝肯定就没意思了。
这里我就想到了C++里面的#define 的用法,如果可以做到这样,那么这道题的数字转换就只剩下了后面半部分的特殊情况了。
这里我想到了两种方法:1.对象 Obj中的键值对 2.Map()方法绑定键值对
这里我们先看第一种方法
1.使用对象绑定键值对
const list={I:1,V:5,X:10,L:50,C:100,D:500,M:1000}
//在将字符串遍历
let ans = 0;
const n = s.length;
for (let i = 0; i < n; ++i) {
//只能使用list[s[i]]的方式查找键值
//不能使用list.s[i],这样是不会对s[i]解码查找,而是
const value = list[s[i]];
if (i < n - 1 && value < list[s[i + 1]]) {
ans -= value;
} else {
ans += value;
}
}
return ans;
};
2.使用Map()方法绑定键值对
const list = new Map();
symbolValues.set('I', 1);
symbolValues.set('V', 5);
symbolValues.set('X', 10);
symbolValues.set('L', 50);
symbolValues.set('C', 100);
symbolValues.set('D', 500);
symbolValues.set('M', 1000);
//在将字符串遍历
let ans = 0;
const n = s.length;
for (let i = 0; i < n; ++i) {
//使用list[s[i]]也是可以的
const value = list.get(s[i]];
if (i < n - 1 && value < list[s[i + 1]]) {
ans -= value;
} else {
ans += value;
}
}
return ans;
};
想到这里我就想Map()的特点,和一个与map()及其相似的类set()
Map()
创建一个Map()对象
Map()方法 添加
Map()方法 取值
Map()的一些函数
重点函数
const mapp=new Map()
mapp.set(1,'one')
mapp.set(2,'two')
mapp.set(3,'three')
mapp.set(4,'four')
//调用函数
console.log(mapp.keys())
console.log(mapp.values())
console.log(mapp.entries())
mapp.forEach(item=>console.log(item))
返回的结果
Map()方法在内存中的存储
Set()
创建一个Map()对象
Set()方法 添加使用add()方法
Map()方法 取值
由于Set对象是一个值的集合,其中每个值都是唯一的。要获取Set对象中的某个值,你可以使用迭代器。以下是获取Set中某个值的方法:
-
使用
for...of循环来迭代Set对象。 -
使用
Array.from()将Set转换为数组,然后通过索引访问特定的值。let mySet = new Set([1, 2, 3]); for (let value of mySet) { console.log(value); } //或者 // 通过Array.from()转换为数组并获取特定索引的值 let array = Array.from(mySet); console.log(array[0]); // 获取第一个值 //或者使用`find()`方法或者`indexOf()`方法来查找特定的值。
一般我们需要查找set中是否存在某个值时候,直接使用Set().has()查找即可
Set()的一些函数
Map()方法在内存中的存储
Set本身是不允许有重复的值,当遇到重复的值添加进来的时候,Set()将会用B方案存储,不会将新值替换旧值。
虽然set.add不允许添加相同的值,但是
set.add({name:’Ecri’})
set.add({name:’Ecri’})
却是可以的,没有找到明确的原因,个人猜测可能跟原型相关。有知道了大佬可以评论区分享一下。
然后Set()也有几个与Map()一样的函数
这里的keys的键名就是键值
返回的结果