Dokumentasi agak menyembunyikan jawabannya. Alih-alih memberikan contoh kode sumber, mereka menyebutkan fungsi (usang) array()di komentar samping: Untuk membuat array, kita bisa menggunakan array fungsi perpustakaan () dan meneruskan nilai item ke sana, sehingga array (1, 2, 3 ) menciptakan sebuah array [1, 2, 3].
Lars Blumberg
8
Meskipun saya suka Kotlin tetapi saya telah mengatakan "dokumentasi Kotlin" tidak cukup baik (saya belajar lebih banyak dari situs lain daripada kotlinlang.org).
Hassan Tareq
1
Juga kadang-kadang Anda hanya ingin intRange yang bisa Anda lakukan: val numbers = 1..5yang memberikan rentang int dari 1 hingga 5.
Apakah lebih baik menggunakan intArrayOflebih arrayOf? Jadi memang IntArraypunya kelebihan dibanding Array<Int>?
Lars Blumberg
17
@LarsBlumberg IntArray sama dengan int [], Array <Int> sama dengan Integer []
user2235698
3
Menginisialisasi daftar sangat mirip:listOf(10, 20, 30, 40, 50)
Cristan
Ketika saya menggunakan fungsi intArrayOf (), saya hadapi Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/KotlinPackage. Saya menggunakan jdk1.8.0_241dan Intellij IDEA
TeachMeJava
92
Perlu disebutkan bahwa ketika menggunakan builtines Kotlin (misalnya intArrayOf(), longArrayOf(), arrayOf(), dll) Anda tidak dapat menginisialisasi array dengan nilai default (atau semua nilai ke nilai yang diinginkan) untuk ukuran tertentu, bukan yang perlu Anda lakukan initialize via memanggil menurut kelas konstruktor .
// Array of integers of a size of Nval arr =IntArray(N)// Array of integers of a size of N initialized with a default value of 2val arr =IntArray(N){ i ->2}
Ini membantu jika Anda memberikan contoh untuk initdi Array<Int>()dan IntArray(), jawaban Anda tidak banyak membantu seperti yang sekarang.
Lars Blumberg
Jawabannya telah diubah
Ali hasan
Array <Int> memberi Anda array bilangan bulat kotak, sedangkan IntArray memberi Anda array int yang sebenarnya.
Mike
4
Bahasa Kotlin memiliki spesialisasi kelas untuk mewakili array dari tipe primitif tanpa tinju overhead: misalnya - IntArray, ShortArray, ByteArray, dll saya perlu mengatakan bahwa kelas-kelas ini tidak memiliki hubungan warisan untuk orang tua Arraykelas, tetapi mereka memiliki set yang sama metode dan properti. Masing-masing dari mereka juga memiliki fungsi pabrik yang sesuai. Jadi, untuk menginisialisasi array dengan nilai-nilai di Kotlin Anda hanya perlu mengetik ini:
val myArr:IntArray= intArrayOf(10,20,30,40,50)
... atau dengan cara ini:
val myArr =Array<Int>(5,{ i ->((i+1)*10)})
myArr.forEach { println(it)}// 10, 20, 30, 40, 50
Saya pikir satu hal yang layak disebutkan dan tidak cukup intuitif dari dokumentasi adalah bahwa, ketika Anda menggunakan fungsi pabrik untuk membuat array dan Anda menentukan ukurannya, array diinisialisasi dengan nilai yang sama dengan nilai indeksnya. Misalnya, dalam array seperti ini
val array = Array(5, { i -> i }):, nilai awal yang ditetapkan adalah [0,1,2,3,4]dan tidak mengatakan [0,0,0,0,0],. Itu sebabnya dari dokumentasi, val asc = Array(5, { i -> (i * i).toString() })menghasilkan jawaban["0", "1", "4", "9", "16"]
5 adalah ukuran Int Array. fungsi lambda adalah fungsi elemen init. kisaran 'it' di [0,4], ditambah 1 buat kisaran di [1,5]
fungsi asal adalah:
/**
* 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.
*/publicclassIntArray(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)...}
Anda cukup menggunakan metode pustaka standar yang ada seperti yang ditunjukkan di sini:
val numbers = intArrayOf(10,20,30,40,50)
Mungkin masuk akal untuk menggunakan konstruktor khusus:
val numbers2=IntArray(5){(it +1)*10}
Anda memberikan ukuran dan lambda yang menjelaskan cara memasukkan nilai. Berikut dokumentasinya:
/**
* 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)
Saya bertanya-tanya mengapa tidak ada yang memberikan jawaban yang paling sederhana:
val array:Array<Int>=[1,2,3]
Sesuai salah satu komentar untuk jawaban asli saya, saya menyadari ini hanya berfungsi ketika digunakan dalam argumen anotasi (yang benar-benar tidak terduga bagi saya).
Sepertinya Kotlin tidak memungkinkan untuk membuat literal array di luar anotasi.
Misalnya, lihat kode ini menggunakan @Opsi dari pustaka args4j:
@Pilihan(
name = "-h",
alias = ["--help", "-?"],
use = "Tunjukkan bantuan ini"
)
var help: Boolean = false
Saya mendapatkan kesalahan berikut dengan kode ini: Tidak didukung [Koleksi literal di luar anotasi]
Rémi P
Saya belum pernah melihat ini sebelumnya. Apakah sintaks ini baru untuk Kotlin?
Lars Blumberg
@ LarsBlumberg, mungkin, saya baru saja mulai menggunakan Kotlin baru-baru ini dengan IntelliJ 2019.1 dan saya menginisialisasi array string seperti yang saya perlihatkan dan berhasil
hdkrus
@ RémiP, Poin bagus, saya menggunakannya pada argumen anotasi. Tetapi itu berarti bahwa literal array berfungsi dalam beberapa konteks dan dalam beberapa lainnya tidak?
hdkrus
1
@ hdkrus Mengapa Anda tidak memperbarui jawaban Anda untuk menunjukkan bagaimana inisialisasi array bekerja dengan anotasi? Ini dapat bermanfaat bagi banyak pembaca pertanyaan ini.
Lars Blumberg
1
Dalam kasus saya, saya perlu menginisialisasi item laci saya. Saya mengisi data dengan kode di bawah ini.
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. DrawerItemval drawerItems =Array<DrawerItem>(iconsArr.size,init={ index ->DrawerItem(iconsArr[index], names[index])})Log.d(LOGGER_TAG,"Number of items in drawer is: "+ drawerItems.size)
Ini tidak benar-benar menjawab pertanyaan dengan cara yang masuk akal.
Qwerp-Derp
Silakan periksa komentar di mana saya menggunakan fungsi lambda untuk menambahkan item.
Rahul
Ini masih tampak seperti cara yang berbelit-belit untuk menyelesaikan masalah ini, setidaknya dibandingkan dengan jawaban lainnya. Saya juga melihat pesan saya sebelumnya, dan tampaknya sulit dalam retrospeksi - saya minta maaf.
Qwerp-Derp
Itu baik, tidak masalah. Saya hanya mencoba menjawab dengan cara yang menyelesaikan masalah saya, saya tidak membandingkan dengan jawaban lain. Terima kasih!
Rahul
1
Deklarasikan array int di global
var numbers= intArrayOf()
Metode onCreate berikutnya menginisialisasi array Anda dengan nilai
overridefun onCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)//create your int array here
numbers= intArrayOf(10,20,30,40,50)}
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan meningkatkan nilai jangka panjangnya.
rollstuhlfahrer
1
Di Jawa array dapat diinisialisasi seperti:
int numbers[]= new int[]{10,20,30,40,50}
Tetapi Di Kotlin, sebuah array diinisialisasi dengan banyak cara seperti:
Setiap jenis array generik yang dapat Anda gunakan fungsi arrayOf () :
val arr = arrayOf(10,20,30,40,50)val genericArray = arrayOf(10,"Stack",30.00,40,"Fifty")
Menggunakan fungsi utilitas Kotlin, sebuah array dapat diinisialisasi
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang bagaimana dan / atau mengapa memecahkan masalah akan meningkatkan nilai jangka panjang jawaban.
leopal
0
Jawaban saya melengkapi @maroun ini adalah beberapa cara untuk menginisialisasi array:
Gunakan array
val numbers = arrayOf(1,2,3,4,5)
Gunakan array yang ketat
val numbers = intArrayOf(1,2,3,4,5)
Campur jenis matriks
val numbers = arrayOf(1,2,3.0,4f)
Array bersarang
val numbersInitials = intArrayOf(1,2,3,4,5)val numbers = arrayOf(numbersInitials, arrayOf(6,7,8,9,10))
array()
di komentar samping: Untuk membuat array, kita bisa menggunakan array fungsi perpustakaan () dan meneruskan nilai item ke sana, sehingga array (1, 2, 3 ) menciptakan sebuah array [1, 2, 3].val numbers = 1..5
yang memberikan rentang int dari 1 hingga 5.Jawaban:
Lihat Kotlin - Tipe Dasar untuk detailnya.
Anda juga dapat menyediakan fungsi penginisialisasi sebagai parameter kedua:
sumber
intArrayOf
lebiharrayOf
? Jadi memangIntArray
punya kelebihan dibandingArray<Int>
?listOf(10, 20, 30, 40, 50)
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/KotlinPackage
. Saya menggunakanjdk1.8.0_241
dan Intellij IDEAPerlu disebutkan bahwa ketika menggunakan builtines Kotlin (misalnya
intArrayOf()
,longArrayOf()
,arrayOf()
, dll) Anda tidak dapat menginisialisasi array dengan nilai default (atau semua nilai ke nilai yang diinginkan) untuk ukuran tertentu, bukan yang perlu Anda lakukan initialize via memanggil menurut kelas konstruktor .sumber
IntArray(N) {i -> 2}
dan bahkan (ketika diinisialisasi dengan konstanta)IntArray(N) {2}
Ini sebuah contoh:
Anda juga dapat menggunakan taman bermain untuk menguji fitur bahasa.
sumber
Di Kotlin Ada Beberapa Cara.
Kemudian cukup nilai awal dari pengguna atau dari koleksi lain atau di mana pun Anda inginkan.
Kami juga dapat membuat array dengan fungsi bawaan seperti-
Cara lain
Anda juga dapat menggunakan
doubleArrayOf()
atauDoubleArray()
atau tipe primitif apa pun alih-alih Int.sumber
var arr = IntArray(size, { it * 1 } )
sama denganvar arr = IntArray(size){it}
Dalam Kotlin kita dapat membuat array menggunakan
arrayOf()
,intArrayOf()
,charArrayOf()
,booleanArrayOf()
,longArrayOf()
fungsi.Sebagai contoh:
sumber
Pertanyaan lama, tetapi jika Anda ingin menggunakan rentang:
Menghasilkan hasil yang hampir sama dengan:
hasil: 10, 20, 30, 40, 50
Saya pikir opsi pertama sedikit lebih mudah dibaca. Keduanya bekerja.
sumber
Anda dapat menggunakan metode ini
contoh
init mewakili nilai default (inisialisasi)
sumber
init
diArray<Int>()
danIntArray()
, jawaban Anda tidak banyak membantu seperti yang sekarang.Bahasa Kotlin memiliki spesialisasi kelas untuk mewakili array dari tipe primitif tanpa tinju overhead: misalnya -
IntArray
,ShortArray
,ByteArray
, dll saya perlu mengatakan bahwa kelas-kelas ini tidak memiliki hubungan warisan untuk orang tuaArray
kelas, tetapi mereka memiliki set yang sama metode dan properti. Masing-masing dari mereka juga memiliki fungsi pabrik yang sesuai. Jadi, untuk menginisialisasi array dengan nilai-nilai di Kotlin Anda hanya perlu mengetik ini:... atau dengan cara ini:
Sekarang Anda dapat menggunakannya:
Semoga ini membantu.
sumber
Saya pikir satu hal yang layak disebutkan dan tidak cukup intuitif dari dokumentasi adalah bahwa, ketika Anda menggunakan fungsi pabrik untuk membuat array dan Anda menentukan ukurannya, array diinisialisasi dengan nilai yang sama dengan nilai indeksnya. Misalnya, dalam array seperti ini
val array = Array(5, { i -> i })
:, nilai awal yang ditetapkan adalah[0,1,2,3,4]
dan tidak mengatakan[0,0,0,0,0]
,. Itu sebabnya dari dokumentasi,val asc = Array(5, { i -> (i * i).toString() })
menghasilkan jawaban["0", "1", "4", "9", "16"]
sumber
Anda dapat membuat Int Array seperti ini:
5 adalah ukuran Int Array. fungsi lambda adalah fungsi elemen init. kisaran 'it' di [0,4], ditambah 1 buat kisaran di [1,5]
fungsi asal adalah:
Kelas IntArray didefinisikan dalam Arrays.kt
sumber
Anda dapat mencoba ini:
sumber
Anda cukup menggunakan metode pustaka standar yang ada seperti yang ditunjukkan di sini:
Mungkin masuk akal untuk menggunakan konstruktor khusus:
Anda memberikan ukuran dan lambda yang menjelaskan cara memasukkan nilai. Berikut dokumentasinya:
sumber
Saya bertanya-tanya mengapa tidak ada yang memberikan jawaban yang paling sederhana:Sesuai salah satu komentar untuk jawaban asli saya, saya menyadari ini hanya berfungsi ketika digunakan dalam argumen anotasi (yang benar-benar tidak terduga bagi saya).
Sepertinya Kotlin tidak memungkinkan untuk membuat literal array di luar anotasi.
Misalnya, lihat kode ini menggunakan @Opsi dari pustaka args4j:
Argumen opsi "alias" adalah tipe
Array<String>
sumber
Dalam kasus saya, saya perlu menginisialisasi item laci saya. Saya mengisi data dengan kode di bawah ini.
Kelas Model Kustom-
sumber
Deklarasikan array int di global
Metode onCreate berikutnya menginisialisasi array Anda dengan nilai
sumber
Di Jawa array dapat diinisialisasi seperti:
Tetapi Di Kotlin, sebuah array diinisialisasi dengan banyak cara seperti:
Setiap jenis array generik yang dapat Anda gunakan fungsi arrayOf () :
Menggunakan fungsi utilitas Kotlin, sebuah array dapat diinisialisasi
sumber
Cara sederhana:
Untuk Integer:
var number = arrayOf <Int> (10, 20, 30, 40, 50)
Tahan Semua tipe data
var number = arrayOf (10, "string value", 10.5)
sumber
intialize array dengan cara ini:
val paramValueList : Array<String?> = arrayOfNulls<String>(5)
sumber
Dengan cara ini, Anda dapat menginisialisasi array int di koltin.
sumber
Jawaban saya melengkapi @maroun ini adalah beberapa cara untuk menginisialisasi array:
Gunakan array
Gunakan array yang ketat
Campur jenis matriks
Array bersarang
Kemampuan untuk memulai dengan kode dinamis
sumber