স্কালাজের একটি সেমিগ্রুপের ধারণা রয়েছে যা আপনি এখানে যা করতে চান তা ক্যাপচার করে এবং তর্কাতীতভাবে সবচেয়ে সংক্ষিপ্ত / পরিষ্কার সমাধানের দিকে নিয়ে যায়:
scala> import scalaz._
import scalaz._
scala> import Scalaz._
import Scalaz._
scala> val map1 = Map(1 -> 9 , 2 -> 20)
map1: scala.collection.immutable.Map[Int,Int] = Map(1 -> 9, 2 -> 20)
scala> val map2 = Map(1 -> 100, 3 -> 300)
map2: scala.collection.immutable.Map[Int,Int] = Map(1 -> 100, 3 -> 300)
scala> map1 |+| map2
res2: scala.collection.immutable.Map[Int,Int] = Map(1 -> 109, 3 -> 300, 2 -> 20)
বিশেষত, বাইনারি অপারেটরের জন্য Map[K, V]
মানচিত্রের কীগুলি একত্রিত করে, V
কোনও ডুপ্লিকেট মানগুলির চেয়ে ভাঁজ করে দেওয়া সেমিগ্রুপ অপারেটর। Int
সংযোজন অপারেটরের ব্যবহারের জন্য স্ট্যান্ডার্ড সেমিগ্রুপ , সুতরাং আপনি প্রতিটি নকল কীটির জন্য মানের যোগফল পাবেন।
সম্পাদনা : ব্যবহারকারীর অনুরোধ অনুসারে আরও কিছু বিশদ।
গাণিতিকভাবে একটি সেমিগ্রুপ হ'ল মানগুলির একটি সেট, এক অপারেটরের সাথে যা সে সেট থেকে দুটি মান নেয় এবং সে সেট থেকে অন্য মান উৎপন্ন করে। সুতরাং সংযোজনের অধীনে পূর্ণসংখ্যাগুলি একটি আধাগোষ্ঠী হয়, উদাহরণস্বরূপ - +
অপারেটর দুটি আরও অন্তর্নির্মিত করতে দুটি ইন্ট যুক্ত করে।
আপনি "প্রদত্ত মূল প্রকার এবং মান ধরণের সমস্ত মানচিত্র" এর সেটগুলির উপরও একটি আধাগোষ্ঠী সংজ্ঞায়িত করতে পারেন, যতক্ষণ আপনি কিছু ক্রিয়াকলাপ নিয়ে আসতে পারেন যা দুটি মানচিত্রকে একত্রিত করে একটি নতুন উত্পাদন করতে পারে যা কোনওভাবে দুটির সংমিশ্রণ রয়েছে ইনপুট।
যদি উভয় মানচিত্রে কোনও কী উপস্থিত না হয় তবে এটি তুচ্ছ। যদি উভয় মানচিত্রে একই কী বিদ্যমান থাকে তবে আমাদের কী মানচিত্রগুলিতে দুটি মান একত্রিত করতে হবে। হুম, আমরা কেবল এমন কোনও অপারেটর বর্ণনা করিনি যা একই ধরণের দুটি সত্তাকে সংযুক্ত করে? এ কারণেই স্কালাজে একটি আধাগোষ্ঠীMap[K, V]
উপস্থিত রয়েছে এবং কেবল যদি উপস্থিত V
থাকে - V
এর সেমিগ্রুপ দুটি মানচিত্র থেকে মানগুলি একত্রিত করতে ব্যবহৃত হয় যা একই কীতে বরাদ্দ করা হয়।
সুতরাং কারণ Int
এখানে মানের ধরণটি 1
হ'ল , কীটির "সংঘর্ষ" দুটি ম্যাপযুক্ত মানের পূর্ণসংখ্যা যোগ করার মাধ্যমে সমাধান করা হয়েছে (যেমন এটি ইন্টের সেমিগ্রুপ অপারেটর করে), তাই 100 + 9
। মানগুলি যদি স্ট্রিংগুলি হয় তবে একটি সংঘর্ষের ফলে দুটি ম্যাপযুক্ত মানগুলি স্ট্রিং কনটেন্টেশন হতে পারে (আবার, কারণ স্ট্রিংয়ের জন্য সেমিগ্রুপ অপারেটর এটিই করে)।
(এবং মজার বিষয় হল যেহেতু স্ট্রিং কনটেনটেশন কমিটিকেটিভ নয় - অর্থাৎ "a" + "b" != "b" + "a"
- ফলস্বরূপ সেমিগ্রুপ অপারেশন হয় না So স্ট্রিংয়ের ক্ষেত্রে map1 |+| map2
এটি পৃথক map2 |+| map1
, তবে ইন্টার ক্ষেত্রে নয়))
map1 ++ map2