programing

C # HashSet에 해당하는 JavaScript는 무엇입니까?

nicescript 2021. 1. 17. 10:35
반응형

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, containsclear.

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

반응형