Sobes.tech
Junior

Чӣ гуна бо коллексияҳо дар Kotlin кор кардан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Дар Kotlin маҷмӯаҳо гурӯҳҳои объектҳоро намояндагӣ мекунанд. Онҳо метавонанд тағйирёбанда (mutable) ё ғайритағйирёбанда (immutable) бошанд.

Маҷмӯаҳои ғайритағйирёбанда (Immutable):

  • Мазмуни онҳо пас аз эҷод кардан тағйирнопазир аст.
  • Бехатар барои хондан дар бисёр сӯрохиҳо.
  • Типҳои асосӣ: List, Set, Map.
val numbers: List<Int> = listOf(1, 2, 3) // Эҷоди рӯйхати ғайритағйирёбанда
// numbers.add(4) // Хатои компилятор: маҷмӯаи ғайритағйирёбанда

Маҷмӯаҳои тағйирёбанда (Mutable):

  • Мазмуни онҳо метавонад тағйир ёбад (илова кардан, хориҷ кардан, тағйир додани унсурҳо).
  • Ба таври пешфарз бехатар нестанд барои сӯрохиҳо (требояд ҳамоҳангсозии дастӣ).
  • Типҳои асосӣ: MutableList, MutableSet, MutableMap.
val mutableNumbers: MutableList<Int> = mutableListOf(1, 2, 3) // Эҷоди рӯйхати тағйирёбанда
mutableNumbers.add(4) // Илова кардани унсур
mutableNumbers.remove(2) // Ҳарос кардан аз унсур

Типҳои асосии маҷмӯаҳо:

  • List: Маҷмӯаи мураттаб, ки имкон медиҳад такроршавандаҳо. Дастрасӣ тавассути индекс.
    val names: List<String> = listOf("Alice", "Bob", "Alice")
    println(names[0]) // "Alice"
    
  • Set: Маҷмӯаи бетартиб, ки такроршавандаҳоро иҷозат намедиҳад. Элементҳо беназир мебошанд.
    val uniqueNumbers: Set<Int> = setOf(1, 2, 2, 3)
    println(uniqueNumbers) // [1, 2, 3]
    
  • Map: Маҷмӯаи ҷуфтҳои калид-арзиш. Ҳар калид беназир аст.
    val ages: Map<String, Int> = mapOf("Alice" to 30, "Bob" to 25)
    println(ages["Alice"]) // 30
    

Идомаҳо барои кор бо маҷмӯаҳо (функсияҳои баландсуръат):

Kotlin пешниҳод мекунад бисёр функсияҳои қавӣ барои коркарди маҷмӯаҳо:

  • filter: Эҷод мекунад маҷмӯаи нав, ки танҳо унсурҳое дорад, ки шартро қонеъ мекунанд.
    val evenNumbers = numbers.filter { it % 2 == 0 } // [2]
    
  • map: Ҳар як унсурро ба унсури нав табдил медиҳад, маҷмӯаи нав эҷод мекунад.
    val squaredNumbers = numbers.map { it * it } // [1, 4, 9]
    
  • forEach: Ҳар як унсурро барои иҷрои амал истифода мебарад.
    numbers.forEach { println(it) } // Натиҷа: 1, 2, 3 дар сатрҳои алоҳида
    
  • reduce: Ҳама унсурҳоро ба як арзиш муттаҳид мекунад бо истифода аз амал.
    val sum = numbers.reduce { acc, i -> acc + i } // 6
    
  • fold: Монанд ба reduce, аммо бо арзиши оғозӣ.
    val sumWithInitial = numbers.fold(10) { acc, i -> acc + i } // 16 (10 + 1 + 2 + 3)
    
  • sortedBy: Маҷмӯаро барпо мекунад дар асоси арзиш аз ҳар унсур.
    val sortedNames = listOf("Charlie", "Alice", "Bob").sortedBy { it } // [Alice, Bob, Charlie]
    
  • groupBy: Гурӯҳбандӣ мекунад унсурҳоро дар асоси калид, ки аз ҳар унсур гирифта мешавад.
    val groupedNumbers = numbers.groupBy { if (it % 2 == 0) "even" else "odd" } // {odd=[1, 3], even=[2]}
    

Трансформатсия байни намудҳои маҷмӯаҳо:

Маскаҳатан, шумо метавонед як намуд маҷмӯаҳоро ба дигаре табдил диҳед, инчунин байни тағйирёбанда ва ғайритағйирёбанда:

val mutableList: MutableList<Int> = listOf(1, 2, 3).toMutableList()
val immutableList: List<Int> = mutableListOf(4, 5, 6).toList()

Кор бо маҷмӯаҳо дар Kotlin хеле осонтар мешавад бо бойгари стандартӣ ва функсияҳои васеъшавӣ.