আমি আমার মন্তব্যটি কিছুটা প্রসারিত করব। List[T]
ডাটা স্ট্রাকচার থেকে scala.collection.immutable
আরো একটি বিশুদ্ধরূপে কার্মিক প্রোগ্রামিং ভাষা কাজে একটি অপরিবর্তনীয় তালিকা উপায় কাজ করতে অপ্টিমাইজ করা হয়। এটির খুব দ্রুত প্রিপেন্ড করার সময় রয়েছে এবং এটি ধরে নেওয়া হয় যে আপনি প্রায় সমস্ত অ্যাক্সেসের জন্য মাথায় কাজ করবেন।
অপরিবর্তনীয় তালিকার খুব দ্রুত প্রিপেনড সময় পাওয়া যায় কারণ তারা তাদের লিঙ্কযুক্ত তালিকাকে "কনস সেল" এর একটি সিরিজ হিসাবে মডেল করে। ঘরটি একটি একক মান এবং পরবর্তী কক্ষে একটি পয়েন্টার সংজ্ঞায়িত করে (ক্লাসিক একক-সংযুক্ত-তালিকার শৈলী):
Cell [Value| -> Nil]
আপনি যখন কোনও তালিকার কাছে অর্থ ছাড়েন, আপনি বিদ্যমান একটি তালিকা রেখে কেবলমাত্র একটি নতুন ঘর তৈরি করছেন:
Cell [NewValue| -> [Cell[Value| -> Nil]]
তালিকাটি পরিবর্তনযোগ্য না হওয়ায় আপনি কোনও আসল অনুলিপি ছাড়াই এটি করা নিরাপদ । পুরানো তালিকাটি পরিবর্তনের এবং আপনার নতুন তালিকার সমস্ত মানকে অবৈধ হওয়ার কারণ নেই danger তবে আপোষ হিসাবে আপনার তালিকার শেষের দিকে পরিবর্তিত পয়েন্টার রাখার ক্ষমতা হারাবেন ।
পুনরাবৃত্তভাবে তালিকাগুলিতে কাজ করতে এটি নিজেকে খুব ভাল ndsণ দেয়। ধরা যাক আপনি নিজের সংস্করণটিকে নিজেরাই সংজ্ঞায়িত করেছেন filter
:
def deleteIf[T](list : List[T])(f : T => Boolean): List[T] = list match {
case Nil => Nil
case (x::xs) => f(x) match {
case true => deleteIf(xs)(f)
case false => x :: deleteIf(xs)(f)
}
}
এটি একটি পুনরাবৃত্ত ফাংশন যা তালিকার প্রধান থেকে একচেটিয়াভাবে কাজ করে এবং :: এক্সট্রাক্টরের মাধ্যমে প্যাটার্ন মিলের সুবিধা গ্রহণ করে। এটি হ্যাস্কেলের মতো ভাষায় আপনি অনেক কিছুই দেখতে পান।
আপনি যদি সত্যিই দ্রুত সংযোজন চান, স্কালা চয়ন করার জন্য প্রচুর পরিবর্তনীয় এবং অপরিবর্তনীয় ডেটা স্ট্রাকচার সরবরাহ করে। পরিবর্তনীয় দিকের দিকে, আপনি সন্ধান করতে পারেন ListBuffer
। বিকল্পভাবে, Vector
থেকে scala.collection.immutable
একটি দ্রুত সংযোজন সময় আছে।