BerandaComputers and TechnologyKotlin untuk Wawancara - Bagian 4: Iterasi

Kotlin untuk Wawancara – Bagian 4: Iterasi

Image for post

Image for post

Foto oleh Dan Emas di Unsplash

Ini adalah Bagian 4 dari Kotlin untuk Wawancara, seri tempat saya membahas fungsi Kotlin dan potongan kode yang sering muncul selama persiapan wawancara Android saya. juga menyusun lembar contekan yang mencakup semua 5 bagian dari seri ini, yang dapat Anda temukan di sini .

Anda dapat menemukan Bagian 1 , Jenis Data Umum, di sini .

Bagian ini meliputi:

Banyak masalah wawancara membutuhkan semacam iterasi, baik itu memanipulasi larik input atau menggunakan peta untuk menyimpan informasi, jadi saya ‘ Saya akan membahas berbagai cara untuk mengulang beberapa struktur data umum.

SEBUAH Jarak di Kotlin adalah urutan nilai yang ditentukan oleh nilai awal, nilai akhir, dan langkah. Langkah, atau jarak antara dua nilai, memiliki nilai default 1. Yang paling sering Anda temui adalah IntRange , tetapi Anda dapat menggunakan Jarak jauh dan CharRange demikian juga.

  • untuk setiap() melakukan tindakan yang diberikan pada setiap elemen dalam koleksi. Ini adalah metode iterasi yang paling sering saya gunakan dalam proyek normal, tetapi tidak sering digunakan dalam wawancara karena 1) untuk setiap() akan melempar ConcurrentModificationException jika Anda mencoba memodifikasi koleksi sambil mengulanginya, dan 2) banyak masalah wawancara yang juga memerlukan pertimbangan indeks.
  • forEachIndexed () seperti untuk setiap(), kecuali Anda juga memiliki akses ke indeks elemen di dalam lambda, yang sering Anda perlukan dalam masalah wawancara.
   // Mencetak elemen pada indeks genap.  
list.forEachIndexed {indeks, elemen -> jika (indeks% 2==0) println ("$ elemen")
}
  • .. , alias rangeTo () , bisa digunakan dalam bentuk untuk (i in a..b) untuk membuat lalu mengulangi melalui Jarak . Rentang akan mencakup baik awal ( a ) dan akhir ( b ), jadi jika Anda mau menggunakannya untuk beralih melalui daftar / larik, Anda harus menuliskannya sebagai untuk (i in 0..list.size-1) atau gunakan sampai sebagai gantinya. Meskipun paling sering digunakan dengan Int
  • s, Anda dapat mengulang Char juga.
   // Iterasi dan cetak dari i=0 hingga i=100  
untuk (i dalam 0..100) {println (i)} // Itera te dari i=0 ke i=list.size-1
untuk (i in 0..list.size-1) {println (list [i])}

// Iterasi dan cetak ‘a’, ‘b’, ‘c’, ‘d’
untuk (i dalam ‘a’ .. ‘d’) {println (i)}

  • ke() berfungsi seperti .. , kecuali setiap iterasi turun satu langkah, bukan satu.
   // Iterasi dan cetak dari i=100 ke i=0     untuk (i in 100 downTo 0) {println (i)}   
  • langkah() memungkinkan Anda menentukan perubahan nilai di antara setiap iterasi.
   // Iterasi dan cetak 1, 3, 5, 7  
untuk (i dalam 1..8 langkah 2) {println (i)}

// Itu erate dan cetak 8, 5, 2
untuk (i in 8 downTo 1 step 3) {println (i)}
    sampai() menyertakan elemen awal, tetapi bukan elemen akhir . Ini adalah cara yang saya sukai untuk mengulangi indeks koleksi, karena jika Anda menggunakan ukuran daftar sebagai akhir, Anda tidak perlu khawatir indeks berada di luar batas.
   // Iterasi dan cetak dari i=0 hingga i=99  
untuk (i dalam 0 hingga 100) {println (i)}
// Iterasi dan cetak elemen dari i=0 sampai i=list.size-1
untuk (i dalam 0 hingga list.size) {println (list [i])}
  • indeks mengembalikan IntRange mewakili indeks valid dari suatu koleksi, dan dapat digunakan serupa dengan sampai().
   daftar val=listOf ('a', 'b', 'c' ) 
println (list.indices)
// Mencetak 0..2
// Iterasi dan cetak elemen dari i=0 hingga i=2

untuk (i in list.indices) {println (list [i])}

  • ulang() menjalankan tindakan fungsi yang diberikan beberapa kali.
   // Cetak "Halo" 100 kali     ulangi (100) {
println ("Halo")
}

Ini adalah sesuatu yang tidak sering Anda lihat dalam proyek nyata, tetapi selalu muncul dalam masalah wawancara – kisi, labirin, grafik, dan lainnya semuanya dapat direpresentasikan menggunakan array 2D.

Inilah cara yang saya sukai untuk beralih melalui array atau daftar 2D menggunakan sampai:

   jika (grid.isEmpty ()) kembali 
untuk (i in 0 hingga grid.size) {
untuk (j in 0 sampai grid [0]. size) {
println (kisi [i] [j])
}
}

Atau, Anda dapat menggunakan indeks :

 

jika (grid.isEmpty ()) kembali
untuk (i in grid.indices) {
untuk (j in 0 sampai grid [0]. size) { println (kisi [i] [j])
}
}

Peta juga umum digunakan dalam masalah wawancara, terutama sebagai cara yang baik untuk menyimpan informasi jika daftar tidak cukup.

Jika Anda perlu mengulang melalui pasangan nilai kunci, Anda dapat menggunakan untuk loop atau untuk setiap. Ini terserah preferensi pribadi.

 

/ / Iterasi melalui entri menggunakan for-loop
untuk ((key, value) di peta) {
println ("$ key=$ value")
}
// Iterasi t melalui entri menggunakan forEach ()
map.forEach {(key, value) -> println ("$ key=$ value")}

Jika Anda hanya perlu mengulang melalui tombol, Anda dapat menggunakan tombol val untuk mendapatkan Set dari semua kunci di peta, dan lakukan iterasi melalui itu.

   map.keys.forEach {println (it)}   

Demikian pula, jika Anda hanya perlu mengulang nilai-nilai, tanda nilai val akan mengembalikan a Set dari semua nilai di peta.

   map.values.forEach {println (it)} 

PriorityQueue berguna saat Anda ingin elemen diproses berdasarkan prioritasnya. Mereka sering digunakan dalam masalah wawancara yang meminta K-th terbesar, K-th terkecil, K atas sering, dll. Saya membahasnya secara lebih rinci di Bagian 1, tapi berikut adalah pengingat tentang seperti apa iterasi melalui satu.

 

val pq=PriorityQueue (listOf (2, 1, 3))
// pq akan kosong setelah 3 iterasi
whi le (pq.isNotEmpty ()) {
println (pq.poll ())
// mencetak 1, lalu 2, lalu 3
}

Itu saja untuk bagian 4! Berikut tautan ke lembar contekan yang mencakup semua 5 bagian lagi.

Read More

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments