সে

সেট মধ্যে JavaScript

2টি অনুশীলনী

সেট সম্পর্কে

JavaScript-এ একটি সেট হলো অ্যারের মতো একটি ডেটা স্ট্রাকচার, যেখানে কেবল ইউনিক প্রিমিটিভ এবং/অথবা অবজেক্ট রেফারেন্স থাকতে পারে।

সেট তৈরি করতে হয় সেট কনস্ট্রাক্টর দিয়ে; কনস্ট্রাক্টরে একটি অ্যারে পাস করে সেটকে শুরুতেই মান দিয়ে ইনিশিয়ালাইজ করা যায়।

const emptySet = new Set();
const setWithInitialValues = new Set(['hello', 'world']);

এলিমেন্ট যোগ করা ও সরানো

সেটের কোনো এলিমেন্টের সাথে একটি মান কঠোরভাবে সমান হলে সেই মান সেটে যোগ করা যায় না।

const set = new Set();
set.add(10);
set.add(10); // 10 is strictly equal to 10, so it can't be added again
set.size;
//=> 1;

set.has(10);
//=> true
set.delete(10);
//=> true; 10 was removed
set.delete(10);
//=> false; 10 is not in the set, so nothing happened

const obj = { color: 'magenta' };
const eerilySimilarObj = { color: 'magenta' };

set.add(obj);
set.add(eerilySimilarObj); // obj and eerilySimilarObj reference different objects, so they can both be added
set.size;
//=> 2

set.clear();
set.size;
//=> 0

সেট ও অ্যারের মধ্যে রূপান্তর

সেট কনস্ট্রাক্টর ব্যবহার করে অ্যারেকে সেটে রূপান্তর করা হয়। আবার স্প্রেড সিনট্যাক্স বা Array.from() দিয়ে সেটকে অ্যারেতে রূপান্তর করা যায়।

const arrayWithDuplicates = [7, 3, 3, 9, 3];
const arrayWithoutDuplicates = [...new Set(arrayWithDuplicates)]; // [7, 3, 9]
const anotherArrayWithoutDuplicates = Array.from(new Set(arrayWithDuplicates)); // [7, 3, 9]

ইটারেশন

একটি সেট হলো একটি কী (key) ভিত্তিক কালেকশন, অর্থাৎ এর এলিমেন্টগুলো একটি কী (key) দিয়ে ইনডেক্স করা থাকে এবং সেগুলো ইনসার্ট করার ক্রম অনুযায়ী ইটারেট করা যায়। যেহেতু সেট এলিমেন্টের কী (key) আর মান একই, তাই Set.keys() আর Set.values() একে অপরের বদলে ব্যবহার করা যায়।

const apples = ['Granny Smith', 'Honey Crisp', 'Royal Gala'];
const appleSet = new Set(apples);

for (let apple of appleSet.keys()) {
  console.log(apple);
}
// 'Granny Smith'
// 'Honey Crisp'
// 'Royal Gala'

for (let apple of appleSet.values()) {
  console.log(apple);
}
// 'Granny Smith'
// 'Honey Crisp'
// 'Royal Gala'

for (let apple of appleSet.entries()) {
  console.log(apple);
}
// ['Granny Smith', 'Granny Smith']
// ['Honey Crisp', 'Honey Crisp']
// ['Royal Gala', 'Royal Gala']

লুকআপ পারফরম্যান্স বনাম অ্যারে

ডেটার একটি কালেকশন জমা রাখতে (অ্যারে নয়, বরং) সেট বেছে নেওয়া হয় সাধারণত এই কারণে যে জমা করা মানগুলো ইউনিক হওয়া দরকার। তবে অ্যারে দিয়েও ইউনিকনেস নিশ্চিত করা যায়, তাই আসলে কেন সেট বেছে নেওয়া হয়, সেটা হয়তো স্পষ্ট নয়।

সংক্ষেপে বললে, সেটগুলো সার্চ করার জন্য অপ্টিমাইজ করা, আর অ্যারে নয়। অ্যারের সার্চ মেথডগুলোর (যেমন Array.indexOf()) রানটাইম অ্যারের আকারের সাথে রৈখিকভাবে বাড়ে; অর্থাৎ অ্যারেতে যত বেশি এলিমেন্ট থাকে, সেটা সার্চ করতে তত বেশি সময় লাগে। অন্যদিকে সেটের সার্চ মেথডগুলোর রানটাইম ধ্রুবক, অর্থাৎ সেটের আকার যাই হোক না কেন তা একই থাকে।

তবে বাস্তবে, কালেকশনে বিশাল পরিমাণ ডেটা না থাকলে এই পারফরম্যান্সের পার্থক্য নগণ্য।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

সেট শিখুন