मूल्यों के साथ कोटलिन में एक सरणी को इनिशियलाइज़ कैसे करें?


261

जावा में एक सरणी को इनिशियलाइज़ किया जा सकता है जैसे:

int numbers[] = new int[] {10, 20, 30, 40, 50}

कोटलिन की सरणी आरंभीकरण कैसा दिखता है?


शायद डॉक्स पर एक नज़र है: kotlinlang.org/docs/reference/basic-types.html
khlr

6
प्रलेखन कुछ हद तक जवाब छुपाता है। स्रोत कोड उदाहरण देने के बजाय वे array()एक साइड टिप्पणी में (पदावनत) फ़ंक्शन का उल्लेख करते हैं : एक सरणी बनाने के लिए, हम एक लाइब्रेरी फ़ंक्शन सरणी () का उपयोग कर सकते हैं और आइटम मानों को पास कर सकते हैं, ताकि सरणी (1, 2, 3) ) एक सरणी बनाता है [1, 2, 3]।
लार्स ब्लमबर्ग

8
हालाँकि मुझे कोटलिन पसंद है लेकिन मैंने कहा है कि "कोटलिन प्रलेखन" पर्याप्त अच्छा नहीं है (मैंने kotlinlive.org की तुलना में अन्य साइटों से अधिक सीखा)।
हसन तारीक

1
इसके अलावा कुछ समय के लिए आप सिर्फ एक इंट्रांगे चाहते हैं जो आप कर सकते हैं: val numbers = 1..5जो 1 से 5 तक की एक अंतर सीमा देता है
सिलहेयर

जवाबों:


313
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)

कोटलिन देखें - विवरण के लिए बुनियादी प्रकार

आप दूसरे पैरामीटर के रूप में एक शुरुआती कार्य भी प्रदान कर सकते हैं:

val numbers = IntArray(5) { 10 * (it + 1) }
// [10, 20, 30, 40, 50]

8
इसका इस्तेमाल करने के लिए बेहतर है intArrayOfसे अधिक arrayOf? इस प्रकार IntArrayसे अधिक लाभ है Array<Int>?
लार्स ब्लमबर्ग

16
@LarsBlumberg IntArray int [] के बराबर है, Array <Int> Integer के समान है []
user2235698

3
किसी सूची की listOf(10, 20, 30, 40, 50)
शुरुआत

जब मैं intArrayOf () फ़ंक्शन का उपयोग कर रहा हूं, तो मैं सामना करता हूं Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/KotlinPackage। मैं उपयोग कर रहा हूँ jdk1.8.0_241और Intellij IDEA
TeachMeJava

92

वर्थ उल्लेख करते हुए कि कोटलिन बिल्डिंस (जैसे intArrayOf(),, इत्यादि) का उपयोग करते समय longArrayOf(), arrayOf()आप किसी दिए गए आकार के लिए डिफ़ॉल्ट मान (या वांछित मान के लिए सभी मान) के साथ सरणी को आरंभीकृत करने में सक्षम नहीं हैं, इसके बजाय आपको कक्षा के मेयर के अनुसार कॉलिंग के माध्यम से प्रारंभ करने की आवश्यकता है ।

// Array of integers of a size of N
val arr = IntArray(N)

// Array of integers of a size of N initialized with a default value of 2
val arr = IntArray(N) { i -> 2 }

9
लैम्ब्डा का उपयोग करने वाला दूसरा डिफ़ॉल्ट मान init सुपर सहायक था! धन्यवाद
rf43

9
आरंभीकरण के दूसरे रूप के रूप में लिखा जा सकता है: IntArray(N) {i -> 2}और भी (जब एक स्थिरांक के साथ प्रारंभिक)IntArray(N) {2}
डेविड सोरोको जूल

1
I के बजाय हम "_" var arr = IntArray (N) {_ -> गलत} का उपयोग कर सकते हैं
Navas pk

1
लैम्ब्डा के साथ एक वही था जो मुझे गतिशील आकार और गैर-वैकल्पिक डिफ़ॉल्ट मान के साथ एक सरणी init की आवश्यकता थी। धन्यवाद!
1

48

यहाँ एक उदाहरण है:

fun main(args: Array<String>) {
    val arr = arrayOf(1, 2, 3);
    for (item in arr) {
        println(item);
    }
}

आप भाषा सुविधाओं का परीक्षण करने के लिए खेल के मैदान का उपयोग कर सकते हैं ।


2
एक टिप्पणी, एक सरणी के मूल्य को प्रिंट करने के लिए, हम looping के बजाय array.joinToString ("") का उपयोग कर सकते हैं।
एंटिकैफ़े

2
काम करता है, लेकिन मुहावरेदार
कोटलीन की

47

कोटलिन में कई तरीके हैं।

var arr = IntArray(size) // construct with only size

तब उपयोगकर्ताओं से या किसी अन्य संग्रह से या जहाँ आप चाहें, बस प्रारंभिक मूल्य।

var arr = IntArray(size){0}  // construct with size and fill array with 0
var arr = IntArray(size){it} // construct with size and fill with its index

हम बिल्ट इन फंक्शन के साथ भी बना सकते हैं जैसे-

var arr = intArrayOf(1, 2, 3, 4, 5) // create an array with 5 values

दूसरा रास्ता

var arr = Array(size){0} // it will create an integer array
var arr = Array<String>(size){"$it"} // this will create array with "0", "1", "2" and so on.

आप Int के बजाय किसी भी आदिम प्रकार का उपयोग कर सकते हैं doubleArrayOf()या कर सकते हैं DoubleArray()


var arr = IntArray(size, { it * 1 } )रूप में ही हैvar arr = IntArray(size){it}
Det

30

Kotlin हम का उपयोग कर सरणी बना सकते हैं arrayOf(), intArrayOf(), charArrayOf(), booleanArrayOf(), longArrayOf()काम करता है।

उदाहरण के लिए:

var Arr1 = arrayOf(1,10,4,6,15)  
var Arr2 = arrayOf<Int>(1,10,4,6,15)  
var Arr3 = arrayOf<String>("Surat","Mumbai","Rajkot")  
var Arr4 = arrayOf(1,10,4, "Ajay","Prakesh")  
var Arr5: IntArray = intArrayOf(5,10,15,20)  

कृपया इस उत्तर को पुन: स्वरूपित करें ताकि यह स्पष्ट हो जाए कि कोड क्या है और टिप्पणी क्या है।

6

पुराना सवाल, लेकिन अगर आप एक सीमा का उपयोग करना चाहते हैं:

var numbers: IntArray = IntRange(10, 50).step(10).toList().toIntArray()

पैदावार लगभग एक ही परिणाम के रूप में:

var numbers = Array(5, { i -> i*10 + 10 })

परिणाम: 10, 20, 30, 40, 50

मुझे लगता है कि पहला विकल्प थोड़ा अधिक पठनीय है। दोनों कार्य।


5

आप इस तरीके का उपयोग कर सकते हैं

var numbers=Array<Int>(size,init)
var numbers=IntArray(size,init)
var numbers= intArrayOf(1,2,3)

उदाहरण

var numbers = Array<Int>(5, { i -> 0 })

init डिफ़ॉल्ट मान का प्रतिनिधित्व करता है (आरंभ करें)


1
यह मदद करता है अगर आप के लिए उदाहरण देने initमें Array<Int>()और IntArray(), आपका जवाब अब के रूप में ज्यादा उपयोगी नहीं है।
लार्स ब्लमबर्ग

उत्तर को संशोधित किया गया है
अली हसन

Array <Int> आपको बॉक्सिंग इंटेगर की एक सरणी देता है, जबकि IntArray आपको एक वास्तविक इंट सरणी देता है।
माइक

4

Kotlin भाषा भूमि के ऊपर मुक्केबाजी के बिना आदिम प्रकार की सरणियों का प्रतिनिधित्व करने के लिए कक्षाओं विशेष: उदाहरण के लिए - IntArray, ShortArray, ByteArray, कहने के लिए आदि मैं जरूरत है कि इन कक्षाओं में माता-पिता के लिए कोई विरासत रिश्ता नहीं है Arrayवर्ग, पर वे तरीके और गुण का एक ही सेट किया है। उनमें से प्रत्येक के पास एक समान कारखाना फ़ंक्शन भी है। तो, कोटलिन में मूल्यों के साथ एक सरणी को आरंभीकृत करने के लिए आपको बस इसे टाइप करने की आवश्यकता है:

val myArr: IntArray = intArrayOf(10, 20, 30, 40, 50)

... या इस तरह:

val myArr = Array<Int>(5, { i -> ((i+1) * 10) })

myArr.forEach { println(it) }                                // 10, 20, 30, 40, 50

अब आप इसका उपयोग कर सकते हैं:

myArr[0] = (myArr[1] + myArr[2]) - myArr[3]

उम्मीद है की यह मदद करेगा।


3

मुझे लगता है कि एक बात जो ध्यान देने योग्य है और दस्तावेज़ीकरण से पर्याप्त सहज नहीं है, वह यह है कि, जब आप किसी सरणी को बनाने के लिए किसी फ़ैक्टरी फ़ंक्शन का उपयोग करते हैं और आप यह निर्दिष्ट करते हैं कि आकार, सरणी को उन मानों के साथ आरंभीकृत किया गया है जो उनके सूचकांक मानों के बराबर हैं। उदाहरण के लिए, इस तरह के रूप में एक सरणी में: val array = Array(5, { i -> i })असाइन किए गए प्रारंभिक मान हैं [0,1,2,3,4]और कहते हैं, नहीं [0,0,0,0,0]। यही कारण है कि प्रलेखन से, val asc = Array(5, { i -> (i * i).toString() })का एक जवाब पैदा करता है["0", "1", "4", "9", "16"]


3

आप इस तरह एक Int Array बना सकते हैं:

val numbers = IntArray(5, { 10 * (it + 1) })

5 इंट अराइ आकार है। लैम्ब्डा फ़ंक्शन तत्व इनिट फ़ंक्शन है। [0,4] में 'इट' रेंज, प्लस 1 मेक रेंज [1,5]

मूल कार्य है:

 /**
 * An array of ints. When targeting the JVM, instances of this class are 
 * represented as `int[]`.
 * @constructor Creates a new array of the specified [size], with all elements 
 *  initialized to zero.
 */
 public class IntArray(size: Int) {
       /**
        * Creates a new array of the specified [size], where each element is 
        * calculated by calling the specified
        * [init] function. The [init] function returns an array element given 
        * its index.
        */
      public inline constructor(size: Int, init: (Int) -> Int)
  ...
 }

Arrays.kt में परिभाषित अंतर श्रेणी


2

आप यह कोशिश कर सकते हैं:

var a = Array<Int>(5){0}

2

आप बस यहाँ दिखाए गए अनुसार मौजूदा मानक पुस्तकालय विधियों का उपयोग कर सकते हैं:

val numbers = intArrayOf(10, 20, 30, 40, 50)

यह एक विशेष निर्माता का उपयोग करने के लिए समझ में आता है, हालांकि:

val numbers2 = IntArray(5) { (it + 1) * 10 }

आप एक आकार और एक लंबो पास करते हैं जो यह बताता है कि मूल्यों को कैसे सम्मिलित किया जाए। यहाँ प्रलेखन है:

/**
 * Creates a new array of the specified [size], where each element is calculated by calling the specified
 * [init] function. The [init] function returns an array element given its index.
 */
public inline constructor(size: Int, init: (Int) -> Int)

2

मैं सोच रहा हूँ कि क्यों किसी ने जवाब का सबसे सरल नहीं दिया:

val array: Array<Int> = [1, 2, 3]

मेरे मूल उत्तर में से एक टिप्पणी के अनुसार, मुझे यह केवल तभी पता चलता है जब एनोटेशन दलीलों में उपयोग किया जाता है (जो वास्तव में मेरे लिए अप्रत्याशित था)।

लगता है कि कोटलिन एनोटेशन के बाहर सरणी शाब्दिक बनाने की अनुमति नहीं देता है।

उदाहरण के लिए, args4j लाइब्रेरी से @ ऑप्शन का उपयोग करके इस कोड को देखें:

    @Option (
        नाम = "-एच",
        उपनाम = ["--हेल्प", "-?"];
        उपयोग = "यह सहायता दिखाएं"
    )
    var मदद: बूलियन = गलत

विकल्प तर्क "उपनाम" प्रकार का है Array<String>


2
मुझे इस कोड के साथ निम्नलिखित त्रुटि मिली है: असमर्थित [एनोटेशन के बाहर संग्रह शाब्दिक]
Rémi P

मैंने यह पहले नहीं देखा है। क्या यह वाक्यविन्यास कोटलिन के लिए नया है?
लार्स ब्लमबर्ग

@LarsBlumberg, शायद, मैंने अभी हाल ही में IntelliJ 2019.1 के साथ कोटलिन का उपयोग करना शुरू किया और मैंने जैसा दिखाया वैसा ही एक स्ट्रिंग ऐरे को इनिशियलाइज़ किया और यह काम किया
hdkrus

@ RémiP, अच्छा बिंदु, मैंने इसका उपयोग एनोटेशन दलीलों पर किया। लेकिन इसका मतलब यह होगा कि सरणी शाब्दिक कुछ संदर्भों में और कुछ अन्य में काम नहीं करता है?
एचडीक्रस

1
@hdkrus आप यह दिखाने के लिए अपने उत्तर को अपडेट क्यों नहीं करते हैं कि एनोटेशन के साथ सरणी आरंभीकरण कैसे काम करता है? इस प्रश्न के कई पाठकों के लिए यह महत्वपूर्ण हो सकता है।
लार्स ब्लमबर्ग

1

मेरे मामले में मुझे अपने ड्रॉअर आइटम को इनिशियलाइज़ करने की आवश्यकता है। मैं नीचे कोड द्वारा डेटा भरता हूं।

    val iconsArr : IntArray = resources.getIntArray(R.array.navigation_drawer_items_icon)
    val names : Array<String> = resources.getStringArray(R.array.navigation_drawer_items_name)


    // Use lambda function to add data in my custom model class i.e. DrawerItem
    val drawerItems = Array<DrawerItem>(iconsArr.size, init = 
                         { index -> DrawerItem(iconsArr[index], names[index])})
    Log.d(LOGGER_TAG, "Number of items in drawer is: "+ drawerItems.size)

कस्टम मॉडल वर्ग-

class DrawerItem(var icon: Int, var name: String) {

}

यह वास्तव में समझदार तरीके से सवाल का जवाब नहीं देता है।
Qwerp-Derp

कृपया उस टिप्पणी की जांच करें जिसमें मैंने आइटम जोड़ने के लिए लैम्बडा फ़ंक्शन का उपयोग किया था।
राहुल

यह अभी भी इस समस्या को हल करने के लिए एक जटिल तरीका लगता है, कम से कम अन्य उत्तरों की तुलना में। इसके अलावा मैं अपने पिछले संदेश को देखा, और यह पूर्वव्यापी में कठोर लगता है - मुझे क्षमा करें।
Qwerp-Derp

यह ठीक है, कोई मुद्दा नहीं। मैंने सिर्फ एक तरह से जवाब देने की कोशिश की, जिसने मेरे मुद्दे को हल किया, मैंने अन्य उत्तरों की तुलना नहीं की। धन्यवाद!
राहुल

1

वैश्विक स्तर पर अंतर सरणी घोषित करें

var numbers= intArrayOf()

अगले onCreate विधि मूल्य के साथ अपने सरणी को इनिशियलाइज़ करें

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    //create your int array here
    numbers= intArrayOf(10,20,30,40,50)
}

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह कोड क्यों और / या इस प्रश्न के उत्तर के बारे में अतिरिक्त संदर्भ प्रदान करता है, इसके दीर्घकालिक मूल्य में सुधार करता है।
रोलस्टुफ़्लोरहेर

1

जावा में एक सरणी को इनिशियलाइज़ किया जा सकता है जैसे:

int numbers[] = new int[] {10, 20, 30, 40, 50}

लेकिन कोटलिन में एक सरणी ने कई तरह से इनिशियलाइज़ किया जैसे:

सरणी का कोई भी सामान्य प्रकार आप arrayOf () फ़ंक्शन का उपयोग कर सकते हैं :

val arr = arrayOf(10, 20, 30, 40, 50)

val genericArray = arrayOf(10, "Stack", 30.00, 40, "Fifty")

कोटलिन एक सरणी के उपयोगिता कार्यों का उपयोग करके आरंभ किया जा सकता है

val intArray = intArrayOf(10, 20, 30, 40, 50)

1

सरल तरीका:

पूर्णांक के लिए:

var संख्या = arrayOf <Int> (10, 20, 30, 40, 50)

सभी डेटा प्रकारों को पकड़ो

var संख्या = arrayOf (10, "स्ट्रिंग मान", 10.5)



0

इस तरह, आप कोल्टिन में इंट सरणी को इनिशियलाइज़ कर सकते हैं।

 val values: IntArray = intArrayOf(1, 2, 3, 4, 5,6,7)

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह समस्या का हल कैसे और / या इसके बारे में अतिरिक्त संदर्भ प्रदान करता है, इससे उत्तर के दीर्घकालिक मूल्य में सुधार होगा।
लियोपल

0

मेरे उत्तर का संकलन @maroun है ये एक सरणी को आरम्भ करने के कुछ तरीके हैं:

एक सरणी का उपयोग करें

val numbers = arrayOf(1,2,3,4,5)

एक सख्त सरणी का उपयोग करें

val numbers = intArrayOf(1,2,3,4,5)

मिक्सचर के प्रकार मिलाएं

val numbers = arrayOf(1,2,3.0,4f)

घोंसले के शिकार

val numbersInitials = intArrayOf(1,2,3,4,5)
val numbers = arrayOf(numbersInitials, arrayOf(6,7,8,9,10))

गतिशील कोड के साथ शुरू करने की क्षमता

val numbers = Array(5){ it*2}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.