arrays - स्कैला में एक सूची के अंत में एक तत्व संलग्न करना




scala (5)

यह एक बेवकूफ सवाल की तरह लगता है, लेकिन इंटरनेट पर जो कुछ मैंने पाया वह कचरा था। मैं बस सूची List[T] में T प्रकार का तत्व नहीं जोड़ सकता List[T] । मैंने myList ::= myElement साथ प्रयास किया लेकिन ऐसा लगता है कि यह एक अजीब वस्तु बनाता है और myList.last तक पहुंचने से हमेशा सूची में डाला गया पहला तत्व लौटाता है।


Answers

हम दो सूचियों या सूची और सरणी को जोड़ या प्रीपेड कर सकते हैं
जोड़ें:

var l = List(1,2,3)    
l=l:+4 
Result : 1 2 3 4  
var ar = Array(4,5,6)    
for(x<-ar)    
{ l=l:+x}  
  l.foreach(println)

Result:1 2 3 4 5 6

prepending:

var l = List[Int]()  
   for(x<-ar)  
    { l=x::l } //prepending    
     l.foreach(println)   

Result:6 5 4 1 2 3

स्कैला में सूचियां संशोधित करने के लिए डिज़ाइन नहीं की गई हैं। वास्तव में, आप एक स्कैला List तत्व नहीं जोड़ सकते हैं; यह जावा स्ट्रिंग की तरह एक अपरिवर्तनीय डेटा संरचना है । जब आप स्कैला में "किसी सूची में तत्व जोड़ते हैं" तो आप वास्तव में क्या करते हैं , मौजूदा सूची से एक नई सूची बनाना है। (Source)

ऐसे उपयोग मामलों के लिए सूचियों का उपयोग करने के बजाय, मैं या तो एक ArrayBuffer या एक ListBuffer उपयोग करने का सुझाव देता ListBuffer । उन डेटास्ट्रक्चर को नए तत्व जोड़ने के लिए डिज़ाइन किया गया है।

अंत में, आपके सभी परिचालन किए जाने के बाद, बफर को फिर सूची में परिवर्तित किया जा सकता है। निम्नलिखित आरईपीएल उदाहरण देखें:

scala> import scala.collection.mutable.ListBuffer
import scala.collection.mutable.ListBuffer

scala> var fruits = new ListBuffer[String]()
fruits: scala.collection.mutable.ListBuffer[String] = ListBuffer()

scala> fruits += "Apple"
res0: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple)

scala> fruits += "Banana"
res1: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple, Banana)

scala> fruits += "Orange"
res2: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple, Banana, Orange)

scala> val fruitsList = fruits.toList
fruitsList: List[String] = List(Apple, Banana, Orange)

List(1,2,3) :+ 4

//--> List[Int] = List(1, 2, 3, 4)

ध्यान दें कि इस ऑपरेशन में ओ (एन) की जटिलता है। यदि आपको अक्सर इस ऑपरेशन की आवश्यकता होती है, या लंबी सूचियों के लिए, किसी अन्य डेटा प्रकार (जैसे एक सूचीबफर) का उपयोग करने पर विचार करें।


ऐसा इसलिए है क्योंकि आपको यह नहीं करना चाहिए (कम से कम एक अपरिवर्तनीय सूची के साथ)। यदि आपको वास्तव में डेटा संरचना के अंत में एक तत्व जोड़ने की ज़रूरत है और इस डेटा संरचना को वास्तव में वास्तव में एक सूची होने की आवश्यकता है और इस सूची को वास्तव में वास्तव में अपरिवर्तनीय होना है तो इसे Eiher करें:

(4 :: List(1,2,3).reverse).reverse

या वो:

List(1,2,3) ::: List(4)

जाहिर है, वाक्यविन्यास पूरी तरह से अलग हैं (ग्रोवी जावा के सबसे नज़दीकी हैं), लेकिन मुझे लगता है कि यह वह नहीं है जिसे आप पूछ रहे हैं।

यदि आप जावा एप्लिकेशन को स्क्रिप्ट करने के लिए उनका उपयोग करने में रुचि रखते हैं, तो स्कैला शायद एक अच्छा विकल्प नहीं है, क्योंकि जावा से इसका मूल्यांकन करने का कोई आसान तरीका नहीं है , जबकि ग्रोवी विशेष रूप से उस उद्देश्य के लिए उपयुक्त है।







arrays scala