সুইফ্ট অ্যারেতে অপারেশনস (ইউনিয়ন, ছেদ) সেট করবেন?


101

আমি দুটি অ্যারেতে সেট অপারেশন সম্পাদন করতে, বা এই জাতীয় যুক্তি নিজেই প্রয়োগ করতে পারি (আদর্শভাবে কার্যকরীভাবে এবং দক্ষতার সাথে সম্ভব হিসাবে কার্যকর) এমন কোনও মানক গ্রন্থাগার কল রয়েছে কি?


যদি আপনি নিজেই এটি করতে চান তবে কোনও অভিধানের উপরে একটি সেট প্রয়োগ করা যেতে পারে।
কোডাফাই

@ কোডাফাই আপনার স্বতন্ত্রতা নিশ্চিত করার জন্য কীগুলি ব্যবহার করে বোঝাতে চাইছেন?
ডিভাইস 1

আপনি কি কেবল `অভিধান <স্ট্রিং, অকার্যকর> ব্যবহার করতে পারেন?
ডেভিড বেরি

উত্তর:


186

হ্যাঁ, সুইফ্টের Setক্লাস রয়েছে।

let array1 = ["a", "b", "c"]
let array2 = ["a", "b", "d"]

let set1:Set<String> = Set(array1)
let set2:Set<String> = Set(array2)

সুইফট +.০+ সেটগুলিতে অপারেশনগুলি করতে পারে:

firstSet.union(secondSet)// Union of two sets
firstSet.intersection(secondSet)// Intersection of two sets
firstSet.symmetricDifference(secondSet)// exclusiveOr

সুইফট ২.০ অ্যারে আর্গুমেন্টে গণনা করতে পারে:

set1.union(array2)       // {"a", "b", "c", "d"} 
set1.intersect(array2)   // {"a", "b"}
set1.subtract(array2)    // {"c"}
set1.exclusiveOr(array2) // {"c", "d"}

সুইফট 1.2+ সেটগুলিতে গণনা করতে পারে:

set1.union(set2)        // {"a", "b", "c", "d"}
set1.intersect(set2)    // {"a", "b"}
set1.subtract(set2)     // {"c"}
set1.exclusiveOr(set2)  // {"c", "d"}

আপনি যদি কাস্টম স্ট্রাক্ট ব্যবহার করছেন তবে আপনার পক্ষে হাস্যাবল প্রয়োগ করতে হবে।

সুইফেল ২.০ আপডেটের জন্য মন্তব্যে মাইকেল স্টারনকে ধন্যবাদ।

হাস্যাবল তথ্যের জন্য মন্তব্যে আমজাদ হাসিনীকে ধন্যবাদ জানাই।


8
নোট করুন, কমপক্ষে সুইফট ২.০ হিসাবে, আপনি এই ফাংশনগুলির যুক্তি হিসাবে একটি অ্যারে পাস করতে পারেন। সুতরাং, set1.union(array2)এবং set1.exclusiveOr(array2)উভয়ই বৈধ, উপরোক্ত ফর্মগুলি ছাড়াও।
মাইকেল স্টারন

আপনি যদি 5 টি অ্যারে ছেদ করতে চান? বা 6? অ্যারে সংখ্যা অজানা থাকলে কী হবে?
নাথান ম্যাককাস্কলে

4
@ নাথান সেট অপারেশনে নির্ভর করে। উদাহরণস্বরূপ, সেট ইউনিয়ন এবং সেট ছেদটি পরিবর্তনীয় এবং সাহসী হয়, তাই আপনি পুনরাবৃত্তি বা চেইন ব্যবহার করে অনেকগুলি সেট প্রক্রিয়া করতে পারেন। অথবা আপনি এমন কাস্টম পদ্ধতি তৈরি করতে পারেন যা var আরগগুলি ব্যবহার করে যেমন ইউনিয়ন_ল (...) এবং ছেদকৃত সমস্ত (...) ব্যবহার করে।
joelparkerhenderson

আপনার অ্যারেতে সদৃশ মান রয়েছে কিনা, উদাহরণস্বরূপ $ 0 $ 1 এর একটি এনামগ্রাম কিনা তা নির্ধারণ করতে যেখানে ইনপুট অক্ষরগুলিতে নকল বর্ণ থাকতে পারে?
ডেভ ক্লিমন

4
আপনি যদি কাস্টম স্ট্রাকস ব্যবহার করছেন তবে আপনাকে হাস্যাবলের সাথে মানিয়ে নিতে হবে, যা আপনার জটিল কাঠামো থাকলে বিরক্তিকর হতে পারে
আমজাদ হুসেনি

0

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


4
একটি সতর্কতামূলক নোট: আমি সুইফট 1.x এর জন্য ইস্যু ছাড়াই এক্সসুইফ্টটি ব্যবহার করছিলাম তবে এটি সুইফট ২.x এর পক্ষে বেশ নষ্ট হয়ে গেছে বলে মনে হচ্ছে এবং এই লেখাটি কয়েক মাসের মধ্যে আপডেট হয়নি। এমন একটি টন কাঁটাচামচ রয়েছে যা আরও বেশি মনোযোগ পেতে পারে।
রবিন মাচার্গ

0

আপনি অবজেক্টিভ-সি এর মতো একই প্যাটার্নটি অনুসরণ করতে চাইতে পারেন, এতেও এই ধরণের ক্রিয়াকলাপের অভাব রয়েছে, তবে একটি সহজ উপায় রয়েছে:

উদ্দেশ্য সিতে দুটি অ্যারে ছেদ করবেন কীভাবে?


0

আমি জানি সবচেয়ে দক্ষ পদ্ধতি হ'ল গডেল নম্বর ব্যবহার করে। গুডেল এনকোডিংয়ের জন্য গুগল।

ধারণাটি তাই। মনে করুন আপনার কাছে N সম্ভাব্য সংখ্যা রয়েছে এবং সেগুলির সেটগুলি তৈরি করা দরকার। উদাহরণস্বরূপ, এন = 100,000 এবং sets 1,2,3}, {5, 88, 19000} ইত্যাদির মতো সেট তৈরি করতে চান

ধারণাটি হ'ল এন প্রাইম সংখ্যাগুলির তালিকা মেমোরিতে রাখা এবং প্রদত্ত একটি সেট - ক, বি, সি, ...} হিসাবে আপনি এটিকে এনকোড করুন

 prime[a]*prime[b]*prime[c]*...

সুতরাং আপনি একটি সেটকে বিগনম্বার হিসাবে এনকোড করেছেন। বড় সংখ্যাগুলির সাথে অপারেশনগুলি, যদিও এটি পূর্ণসংখ্যার সাথে অপারেশনগুলির তুলনায় তারা ধীর গতিতে এখনও বেশি দ্রুত।

2 সেট A, B একত্রিত করতে আপনি নিন

  UNITE(A, B) = lcm(a, b)

এ এবং বি হিসাবে এ এবং বি এর সর্বনিম্ন-সাধারণ-একাধিক সেট এবং উভয় সংখ্যা।

চৌরাস্তাটি আপনি নিতে নিতে

 INTERSECT(A, B) = gcd (a, b)

সর্বশ্রেষ্ঠ সাধারণ বিভাজক।

ইত্যাদি।

এই এনকোডিংটিকে গডেলাইজেশন বলা হয়, আপনি আরও গুগল করতে পারেন, ফ্রিজের লজিক ব্যবহার করে লিখিত সমস্ত পাটিগণিতের ভাষা এইভাবে সংখ্যা ব্যবহার করে এনকোড করা যায়।

অপারেশন পেতে কি সদস্য? এটা খুব সহজ -

ISMEMBER(x, S) = remainder(s,x)==0

কার্ডিনালটি পেতে এটি আরও কিছুটা জটিল -

CARDINAL(S) = # of prime factors in s

আপনি মৌলিক উপাদানগুলির উত্পাদনে সেটটি উপস্থাপন করে এস সংখ্যাটি পচন করুন এবং তাদের ক্ষয়কারীকে যুক্ত করুন। যদি সেটটি সদৃশদের অনুমতি না দেয় তবে আপনার সমস্ত এক্সপোজার 1 থাকবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.