C# HashSet에 해당하는 JavaScript는 무엇입니까?
저는 수천 개의 정수 키 목록을 가지고 있습니다.이 목록에서 제가 해야 할 일은 주어진 값이 목록에 있는지 여부를 말하는 것입니다.
C#의 경우 다음을 사용합니다.HashSet
빨리 찾을 수 있도록 말입니다.자바스크립트에 해당하는 것은 무엇입니까?
최소 지원 수준: IE 9+, jQuery(현재)
실제로 JavaScript는 Set 객체를 제공하며 사용하기 매우 간단합니다.
var set = new Set();
set.add(1);
set.add(2);
set.has(1) // true
안타깝게도 IE9과 호환되지 않습니다.
후드 아래에서 JavaScript Object는 해시 테이블과 함께 구현됩니다.그래서, 당신의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
개체를 사용합니다.세트에 키를 추가하려면 다음을 수행합니다.
object[key] = true;
키가 세트에 있는지 테스트하려면 다음을 수행합니다.
if (object.hasOwnProperty(key)) { ... }
세트에서 키를 제거하려면 다음을 수행합니다.
delete object[key]
일반 JavaScript 개체와 '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 요소를 저장할 수 있는 해시셋을 원했습니다.이러한 개체를 추가할 때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;
};
};
메모
다음과 같은 것을 추가할 때$('#myElement')
세트에 실제 HTML 요소를 추가해야 합니다.$('#myElement')[0]
아... 그리고 만약 당신이 변경된 컨트롤의 목록을 유지하고 싶다면 - 요소의 이름을 사용하세요. (문제가 생겼습니다.):radio
제어)를 선택합니다.
노트2
제 생각엔object[key]
정수가 더 빠를 수 있습니다.
노트3
숫자나 문자열만 저장할 경우 이 집합이 더 빠릅니다.
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);
};
};
지도 또는 약한 지도를 반복할 필요가 없는 경우
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}`);
});
오직 자바스크립트의 맵만이 더 빠른 룩업을 가지고 있습니다. 만약 당신이 룩업만을 원한다면 당신은 아래와 같은 배열로 룩업 맵을 만들고 그것을 사용할 수 있습니다.
function createLookUpMap(arr = []) {
return new Map(arr.map(item => [item, true]));
}
const lookupMap = createLookUpMap(['apple', 'orange', 'banana']);
lookupMap.has('banana'); // O(1)
언급URL : https://stackoverflow.com/questions/24196067/what-is-the-javascript-equivalent-to-a-c-sharp-hashset
'programing' 카테고리의 다른 글
상태를 잃지 않고 DOM에서 iFrame을 이동하는 방법은 무엇입니까? (0) | 2023.08.09 |
---|---|
환경설정 활동에서 "자원에서 환경설정 추가" 대신 사용할 항목은 무엇입니까? (0) | 2023.08.09 |
'for' 루프에서 i = i + 1과 i + = 1의 차이는 무엇입니까? (0) | 2023.08.09 |
보기의 배경색 설정 방법 (0) | 2023.08.09 |
Swift: 제네릭 형식이 프로토콜을 준수하는지 확인합니다. (0) | 2023.08.09 |