मैं यह पता लगाने में समस्या का सामना कर रहा हूं कि स्कैला का उपयोग करके किसी निर्दिष्ट स्थान पर एक तत्व को कैसे गिराया जा सकता है।
मैं कैसे स्लैला का उपयोग करके स्ट्रिंग में एक निर्दिष्ट स्थान पर एक चरित्र को गिराता हूं और यह भी कि मैं स्केला में स्ट्रिंग में एक निर्दिष्ट स्थान पर एक चरित्र कैसे जोड़ सकता हूं?
उत्तर:
उत्तर № 1 के लिए 1का उपयोग करते हुए patch
@BenReich द्वारा संभवतः इसके लिए सबसे मुहावरेदार और साफ-सुथरा तरीका है; उदाहरण के लिए एक और तरीका भी शामिल है take
तथा drop
के एक अनुक्रम के रूप में एक स्ट्रिंग पर Char
, इस तरह,
val s = ("a" to "e").mkString
s: String = abcde
scala> s.take(2) ++ s.drop(3) // remove third char
res0: String = abde
scala> s.take(2) ++ "CCC" ++ s.drop(3) // replace third char with a string
res1: String = abCCCde
scala> s.take(2) ++ s.drop(4) // remove from third to fourth chars
res2: String = abe
ध्यान दें कि यह बड़े तारों के लिए सबसे कुशल दृष्टिकोण नहीं है।
जवाब के लिए 3 № 2
इसमें से अधिकांश के साथ किया जा सकता है patch
तरीका:
val x = "abcdefgh"
//Replace 1 element starting at the 4th position with "" (thereby eliminating the fourth element)
x.patch(4, "", 1) //"abcdfgh"
//Replace 0 elements starting at the 4th position with "A" (thereby adding an element after the fourth element)
x.patch(4, "A", 0) //"abcdAefgh"
विधि पर परिभाषित किया गया है GenSeqLike
, जो कि उच्च पदानुक्रम का उच्च स्तर है, इसलिए आप उपयोग कर सकते हैं patch
के अलावा अन्य प्रकार पर String
:
List(1, 2, 3, 4, 5, 6, 7).patch(4, Seq(), 1) //List(1, 2, 3, 4, 6, 7)
के दस्तावेज पढ़ें patch
यहाँ.
आप भी समृद्ध कर सकते हैं GenSeqLike
इस प्रकार की विधि अधिक आसानी से उपलब्ध करने के लिए:
import scala.collection.GenSeqLike
implicit class RichGenSeqLike[T, Repr <% GenSeqLike[T, Repr]](val seq: Repr) {
import scala.collection.generic.CanBuildFrom
def dropAt[That](n: Int)(implicit bf: CanBuildFrom[Repr, T, That]): That = seq.patch(n, Seq.empty[T], 1)
def addAt[That](n: Int)(ts: T*)(implicit bf: CanBuildFrom[Repr, T, That]): That = seq.patch(n, ts, 0)
}
और फिर आप कर सकते हैं:
List(1, 2, 3).dropAt(1) //List(1, 3)
"abc".dropAt(1) //"ac"
List(1, 2, 3).addAt(1)(4) //List(1, 4, 2, 3)
List(1, 2, 3).addAt(1)(4, 5, 6) //List(1, 4, 5, 6, 2, 3)
"abc".addAt(1)("A") //aAbc
"abc".addAt(1)("A", "B") //aABbc
"abc".addAt(1)("ABC":_*) //aABCbc
बेशक, यदि आप इसे अपने मानक पुस्तकालय में जोड़ रहे हैं, तो आप कुछ सीमा जाँच करने पर विचार कर सकते हैं।
उत्तर № 3 के लिए 1
आप स्ट्रिंग को दो भागों में तोड़ने के लिए "उप-स्ट्रिंग" का उपयोग कर सकते हैं और फिर आवश्यक वर्ण जोड़ने के बाद, उन्हें फिर से जोड़ सकते हैं।