स्काला में एक उप-क्षेत्र प्राप्त करने का सही तरीका क्या है?


95

मैं स्कैला में एक सबर्रे प्राप्त करने की कोशिश कर रहा हूं, और मैं थोड़ा उलझन में हूं कि यह करने का उचित तरीका क्या है। मैं सबसे ज्यादा क्या चाहूंगा जैसे कि आप इसे अजगर में कैसे कर सकते हैं:

x = [3, 2, 1]
x[0:2]

लेकिन मुझे पूरा यकीन है कि आप ऐसा नहीं कर सकते।

यह करने के लिए सबसे स्पष्ट तरीका जावा एरेस उपयोग पुस्तकालय का उपयोग करना होगा।

import java.util.Arrays
val start = Array(1, 2, 3)
Arrays.copyOfRange(start, 0, 2)

लेकिन यह हमेशा मुझे स्काला में जावा पुस्तकालयों का उपयोग करने के लिए थोड़ा गंदा महसूस करता है। सबसे "scalaic" तरीका मुझे ऐसा करने के लिए मिला

def main(args: List[String]) {
    val start = Array(1, 2, 3)
    arrayCopy(start, 0, 2)
}
def arrayCopy[A](arr: Array[A], start: Int, end: Int)(implicit manifest: Manifest[A]): Array[A] = {
    val ret = new Array(end - start)
    Array.copy(arr, start, ret, 0, end - start)
    ret
}

लेकिन क्या कोई बेहतर तरीका है?

जवाबों:


131

आप स्लाइस विधि को कॉल कर सकते हैं:

scala> Array("foo", "hoo", "goo", "ioo", "joo").slice(1, 4)
res6: Array[java.lang.String] = Array(hoo, goo, ioo)

यह अजगर की तरह काम करता है।


3
ओह, बेशक, ArrayOps scala-lang.org/api/current/scala/collection/mutable/… , मैं गूंगा हूं।
nnythm

हाँ तुम सही हो। मैं बाध्य सम्मेलनों की बात कर रहा था। निचली बाउंड को शामिल किया गया है और ऊपरी को बाहर रखा गया है। :न ही कोई अनुगामी है ।
प्रतिगामी

@nnythm लिंक प्रमुख है।
अमीर ए। शबानी

14

कल्पना कीजिए कि आपके पास तत्वों के साथ एक सरणी aहैf

scala> val array = ('a' to 'f').toArray // Array('a','b','c','d','e','f')

फिर आप इसे अलग-अलग तरीकों से एक उप-सरणी निकाल सकते हैं:

  1. पहले n पहले तत्वों को छोड़ना drop(n: Int)

    array.drop(2) // Array('c','d','e','f')

  2. पहले n तत्वों को साथ लें take(n: Int)

    array.take(4) // Array('a','b','c','d')

  3. तत्वों के किसी भी अंतराल का चयन करें slice(from: Int, until: Int)। ध्यान दें कि untilबाहर रखा गया है।

    array.slice(2,4) // Array('c','d')

    टुकड़ा विधि सख्ती से इसके बराबर है:
    array.take(4).drop(2) // Array('c','d')

  4. इसके साथ अंतिम n तत्वों को छोड़ें dropRight(n: Int):

    array.dropRight(4) // Array('a','b')

  5. अंतिम n तत्वों का चयन करें takeRight(n: Int):

    array.takeRight(4) // Array('c','d','e','f')

संदर्भ : आधिकारिक दस्तावेज


1

2 डी स्केल ऐरे (original_array) से विशिष्ट कॉलम निकालने का एक उदाहरण:

import scala.collection.mutable.ArrayBuffer

val sub_array = ArrayBuffer[Array[String]]()
val columns_subset: Seq[String] = Seq("ColumnA", "ColumnB", "ColumnC")
val columns_original = original_array(0)

for (column_now <- columns_subset) {
      sub_array += original_array.map{_(columns_original.indexOf(column_now))}
    }
sub_array
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.