বলুন আমার একটা Array[Int]
পছন্দ আছে
val array = Array( 1, 2, 3 )
এখন আমি অ্যারের সাথে একটি উপাদান যুক্ত করতে চাই 4
, নিম্নোক্ত উদাহরণ হিসাবে যেমন মান বলি :
val array2 = array + 4 // will not compile
আমি অবশ্যই System.arraycopy()
এটি নিজেই ব্যবহার করতে এবং করতে পারি, তবে এর জন্য অবশ্যই একটি স্কালা লাইব্রেরি ফাংশন থাকতে হবে, যা আমি সন্ধান করতে পারি না। কোন পয়েন্টার জন্য ধন্যবাদ!
মন্তব্য:
আমি সচেতন যে আমি নীচের লাইনের মতো উপাদানগুলির আর একটি অ্যারে সংযুক্ত করতে পারি তবে এটি প্রায় গোলাকার মনে হয়:
val array2b = array ++ Array( 4 ) // this works
আমি তালিকা বনাম অ্যারে এর সুবিধাগুলি এবং অপূর্ণতা সম্পর্কে সচেতন এবং এখানে আমি বিভিন্ন কারণে বিশেষত আগ্রহী অ্যারে প্রসারিত করতে আগ্রহী।
সম্পাদনা 1
:+
অপারেটর পদ্ধতির দিকে নির্দেশিত উত্তরের জন্য ধন্যবাদ । এই আমি খুঁজছিলাম ছিল। দুর্ভাগ্যক্রমে, এটি ব্যবহার করে একটি কাস্টম অ্যাপেন্ড () পদ্ধতি প্রয়োগের চেয়ে ধীর arraycopy
- প্রায় দুই থেকে তিনগুণ ধীর। বাস্তবায়নের দিকে তাকালে SeqLike[]
একটি বিল্ডার তৈরি করা হয়, তারপরে অ্যারে যুক্ত করা হয়, তারপরে সংযোজনটি বিল্ডারের মাধ্যমে করা হয়, তারপরে বিল্ডারকে রেন্ডার করা হয়। অ্যারেগুলির জন্য একটি ভাল বাস্তবায়ন নয়। আমি দুটি পদ্ধতির তুলনায় একটি দ্রুত বেঞ্চমার্ক করেছি, দশটি চক্রের মধ্যে দ্রুততম সময়ের দিকে তাকিয়ে। কিছু শ্রেণীর 8-উপাদান অ্যারের উদাহরণগুলিতে একক আইটেমের 10 মিলিয়ন পুনরাবৃত্তিগুলি করা একটি সহজ পদ্ধতি যা ব্যবহার করে Foo
3.1 সেকেন্ড :+
এবং 1.7 সেকেন্ড লাগেappend()
System.arraycopy();
লং-এর 8-উপাদান অ্যারেগুলিতে 10 মিলিয়ন একক-আইটেম সংযোজন পুনরাবৃত্তিগুলি :+
করতে সাধারণ append()
পদ্ধতির সাথে 2.1 সেকেন্ড এবং 0.78 সেকেন্ড লাগে । ভাবছেন যদি কাস্টম বাস্তবায়নের সাথে লাইব্রেরিতে এটি স্থির করা যায় না Array
?
সম্পাদনা 2
এটির মূল্যের জন্য, আমি একটি টিকিট দায়ের করেছি: https://issues.scala-lang.org/browse/SI-5017
System.arraycopy(...)
দ্বারা প্রতিস্থাপিত হয়Array.copy(...)
ArrayBuffer
পরে রূপান্তরিত হওয়া এমনটি ব্যবহার করে আপনি কী আবার আপনার বেঞ্চমার্কটি চালাতে পারেন ? toArray
ArrayBuffer
এবং এর+=
পদ্ধতি? এটি আপনাকে এমোরিটাইজড ও (1) সংযোজন দেবে।