จะสร้างอาร์เรย์ว่างใน kotlin ได้อย่างไร?


93

ฉันกำลังใช้งานArray(0, {i -> ""})อยู่และอยากทราบว่ามีการใช้งานที่ดีกว่านี้หรือไม่เช่นArray()

นอกจากนี้หากฉันใช้arrayOfNulls<String>(0) as Array<String>คอมไพเลอร์จะแจ้งเตือนฉันว่าการแคสต์นี้ไม่มีวันสำเร็จ Array(0, {i -> ""})แต่มันเป็นเรื่องภายในเริ่มต้นใช้งาน ฉันคิดถึงอะไร?


stackoverflow.com/questions/33583235/… - หนึ่งในความคิดเห็นชี้ให้เห็นว่าคำเตือนเป็นข้อบกพร่อง
Duncan McGregor

คำตอบ:


128

เมื่อปลาย (มิถุนายน 2015) มีฟังก์ชันไลบรารีมาตรฐาน Kotlin

public fun <T> arrayOf(vararg t: T): Array<T>

ดังนั้นเพื่อสร้างอาร์เรย์ว่างของสตริงที่คุณสามารถเขียนได้

val emptyStringArray = arrayOf<String>()

2
แล้วอาร์เรย์ที่พิมพ์เป็นIntArrayอย่างไร? ตอนนี้ใช้arrayOf<Int>().toIntArray()อยู่มีวิธีไหนที่ดีกว่านี้ไหม?
csharpfolk

5
วัตถุประสงค์ของวิธีการเหล่านี้คืออะไร? เนื่องจากเรากำหนดขนาดไม่ได้จึงไม่สามารถกำหนดมูลค่าหรือรับได้ อาร์เรย์ [0] โยนjava.lang.ArrayIndexOutOfBoundsException:ข้อยกเว้น
Asif Mushtaq

จะเป็นอย่างไรถ้าเป็นประเภทTแทนที่จะเป็นString?
อารีย์

1
@csharpfolk คุณสามารถใช้ intArrayOf () เพื่อเริ่มต้น IntArray ที่ว่างเปล่า
Cremons

จะเพิ่มรายการใน string array ใน kotlin ได้อย่างไร?
Syed Hamza Hassan

42

สำหรับการอ้างอิงก็มีเช่นemptyArrayกัน ตัวอย่างเช่น,

var arr = emptyArray<String>()

ดู


1
arr [0] โยนjava.lang.ArrayIndexOutOfBoundsException:ว่าเราจะใช้มันได้อย่างไร?
Asif Mushtaq

8
มันเป็นอาร์เรย์ว่างคุณไม่สามารถเพิ่ม / อ่านอะไรไปที่ / จากมันได้ อาจดูเหมือนไร้ประโยชน์ แต่บางครั้งคุณต้องส่งอาร์เรย์ที่ไหนสักแห่งซึ่งจะช่วยให้คุณสร้างอาร์เรย์ว่างได้อย่างง่ายดาย
Kuba Beránek

1
นี่ดีกว่าคำตอบของ Martian Odyssey เพราะเมื่อใช้ในคลาสข้อมูลเพื่อเริ่มต้นอาร์เรย์ arrayOf จะทำให้ java.util.concurrent.ExecutionException ในขณะที่ emptyArray () ไม่ได้
iSWORD

1
มีความยาวไม่เปลี่ยนรูป0! ดังนั้นจึงมีประโยชน์สำหรับวัตถุประสงค์พิเศษที่คุณไม่ต้องการจัดเก็บข้อมูลใด ๆ(เพียงแค่ต้องการประเภท ) ใช้Array(length){""}เพื่อรวมไฟล์length. ดูคำตอบของฉันด้านล่างสำหรับรายละเอียด
Mir-Ismaili

14

ว่างหรือnull? นั่นคือคำถาม!

การสร้างอาร์เรย์ของnulls arrayOfNulls<Type>(length)เพียงแค่ใช้


แต่ในการสร้างอาร์เรย์ว่างlengthให้ใช้:

val arr = Array(length) { emptyObject }

หมายเหตุคือคุณต้องกำหนดemptyObjectอย่างถูกต้องสำหรับข้อมูลแต่ละประเภท (เพราะคุณไม่ต้องการnull) เช่น. สำหรับStrings emptyObjectสามารถ"". ดังนั้น:

val arr = Array(3) { "" }  // is equivalent for: arrayOf("","","")

นี่เป็นตัวอย่างที่มีชีวิต โปรดสังเกตว่าโปรแกรมทำงานโดยมีอาร์กิวเมนต์สองตัวอย่างตามค่าเริ่มต้น



2

ใช้:

@JvmField val EMPTY_STRING_ARRAY = arrayOfNulls<String>(0)

ส่งคืนอาร์เรย์ขนาด 0 ของสตริงเริ่มต้นด้วยค่า null

1. ผิด:

@JvmField val EMPTY_STRING_ARRAY = emptyArray<String>()

มันกลับมา arrayOfNulls<String>(0)

2. ผิด:

 @JvmField val EMPTY_STRING_ARRAY = arrayOf<String>()

ส่งคืนอาร์เรย์ที่มีสตริง



1

ฉันพบสองวิธีในการสร้างอาร์เรย์ว่างวิธีที่สองโดยไม่มีแลมด้า:

var arr = Array (0, { i -> "" })
var arr2 = array<String>()

เกี่ยวกับสตริงว่างของ Kotlin สิ่งนี้ไม่ได้รับอนุญาต คุณต้องใช้String? พิมพ์เพื่ออนุญาตให้สตริงเป็นโมฆะ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.