C # HashSet에 해당하는 JavaScript는 무엇입니까?
수천 개의 정수 키 목록이 있습니다. 이 목록으로해야 할 유일한 일은 주어진 값이 목록에 있는지 여부를 말하는 것입니다.
C #의 경우 HashSet
빠른 조회를 위해 a 를 사용합니다 . JavaScript에 상응하는 것은 무엇입니까?
최소 지원 수준 : IE 9+, jQuery (현재)
내부적으로 JavaScript 객체는 해시 테이블로 구현됩니다. 그래서, 당신의 Key:Value
쌍은(your integer):true
상수 시간 조회 기능은 다음과 같이 구현할 수 있습니다.
var hash = {
1:true,
2:true,
7:true
//etc...
};
var checkValue = function(value){
return hash[value] === true;
};
checkValue(7); // => true
checkValue(3); // => false
실제로 JavaScript는 사용하기 매우 간단한 Set 객체를 제공합니다 .
var set = new Set();
set.add(1);
set.add(2);
set.has(1) // true
불행히도 IE9와 호환되지 않습니다.
개체를 사용하십시오. 세트에 키를 추가하려면 다음을 수행하십시오.
object[key] = true;
키가 세트에 있는지 테스트하려면 다음을 수행하십시오.
if (object.hasOwnProperty(key)) { ... }
세트에서 키를 제거하려면 다음을 수행하십시오.
delete object[key]
일반 자바 스크립트 개체와 'in'키워드 만 사용하여 해당 개체에 특정 키가 있는지 확인할 수 있습니다.
var myObj = {
name: true,
age: true
}
'name' in myObj //returns true;
'height' in myObj // returns false;
또는 JavaScript 객체 속성에서 빌드 할 수있는 객체에 키가 있다는 것을 알고 있다면 ...
var myObj = {
name: true,
age: true
}
myObj.hasOwnProperty('name') //returns true;
myObj.hasOwnProperty('height') // returns false;
나는 해결책을 읽었고 몇 가지를 시도했습니다. object[key]
방법 을 사용하려고 시도한 후에 나는 그것이 작동하지 않을 것이라는 것을 깨달았습니다. HTML 요소를 저장할 수있는 HashSet을 원했습니다. 이러한 객체를 추가 할 때는 key
문자열로 번역되었으므로 jQuery를 기반으로 한 고유 한 집합을 생각해 냈습니다. 그것은 지원 add
, remove
, contains
와 clear
.
var HashSet = function () {
var set = [];
this.add = function (obj) {
if (!this.contains(obj)) {
set.push(obj);
}
};
this.remove = function (obj) {
set = jQuery.grep(set, function (value) {
return value !== obj;
});
};
this.clear = function () {
set = [];
};
this.contains = function (obj) {
return $.inArray(obj, set) > -1;
};
this.isEmpty = function () {
return set.length === 0;
};
};
Note
When adding something like $('#myElement')
to the set, one should add the real HTML element $('#myElement')[0]
. Oh... and if you want to keep a list of changed controls - use the name of the element (gave me a problem with :radio
controls).
Note2
I think the object[key]
might be faster for your integers.
Note3
If you are only going to store numbers or string, this set will be faster:
var HashSet = function () {
var set = {};
this.add = function (key) {
set[key] = true;
};
this.remove = function (key) {
delete set[key];
};
this.clear = function () {
set = {};
};
this.contains = function (key) {
return set.hasOwnProperty(key);
};
this.isEmpty = function () {
return jQuery.isEmptyObject(set);
};
};
Map or if no need to iterate WeakMap
let m1=new Map();
m1.set('isClosed',false);
m1.set('isInitialized',false);
m1.set('isClosed',true);
m1.forEach(function(v,k)
{
console.log(`${k}=${v}`);
});
ReferenceURL : https://stackoverflow.com/questions/24196067/what-is-the-javascript-equivalent-to-a-c-sharp-hashset
'programing' 카테고리의 다른 글
Gnuplot 선 유형 (0) | 2021.01.17 |
---|---|
순서가 지정된 목록의 숫자를 굵게 표시하는 방법이 있습니까? (0) | 2021.01.17 |
MSMQ (Microsoft Message Queuing) 란 무엇입니까? (0) | 2021.01.17 |
div에서 innerHTML 제거 (0) | 2021.01.17 |
목록 이외의 시퀀스에 대한 스칼라 패턴 일치 (0) | 2021.01.17 |