Swift Kotlin Knowledge # 1 找到陣列第一個指定參數位置index
4 min readFeb 23, 2023
這個系列我想紀錄在Swift與Kotlin一些共有的知識點,可能是一些邏輯與寫法,可以更加的節省程式碼或者是更簡單地寫出一些功能。
這篇則要記錄兩個平台都常遇到的事情,在陣列內找到第一個相符合的陣列參數,並且找到相對應的index
Kotlin
自己的寫法:
var firstSix = -1
var firstSeven = -1
val intArray = arrayListOf<Int>(1,782,3,51,689,448,22,5,350,6,99,802)
for (i in intArray.size downTo 0) {
if (intArray[i] == 6) {
firstSix = i
}
if (intArray[i] == 7) {
firstSeven = i
}
}
println("first of Six index: $firstSix")
println("first of Seven index: $firstSeven")
//first of Six index: 9
//first of Seven index: -1
可以看到邏輯是透過for迴圈並透過倒轉的方法找到第一個符合的值,會倒轉是因為有可能有一樣的值,因為要找第一個值,所以透過顛倒的方式來處理。
indexOfFirst 寫法:
val intArray = arrayListOf<Int>(1,782,3,51,689,448,22,5,350,6,99,802)
val firstSix = intArray.indexOfFirst { it == 6 }
val firstSeven = intArray.indexOfFirst { it == 7 }
println("first of Six index: $firstSix")
println("first of Seven index: $firstSeven")
//first of Six index: 9
//first of Seven index: -1
Kotlin原生已經提供了更簡便的寫法:indexOfFirst,可以從這當中下自己的條件去搜尋符合的第一個參數位置。若陣列內沒有相符合的值,則會回傳-1,也省去了安全性的檢查。
Swift
自己的寫法:
var firstSix = -1
var firstSeven = -1
let intArray = [1,782,3,51,689,448,22,5,350,6,99,802]
for i in intArray.indices.reversed() {
if intArray[i] == 6 {
firstSix = i
}
if intArray[i] == 7 {
firstSeven = i
}
}
print("first of Six index: \(firstSix)")
print("first of Seven index: \(firstSeven)")
//first of Six index: 9
//first of Seven index: -1
基本邏輯也與與Kotlin一樣,將陣列透過迴圈反向過濾出第一個符合的值,來實現這個功能。
firstIndex(of:)寫法
let intArray = [1,782,3,51,689,448,22,5,350,6,99,802]
var firstSix = intArray.firstIndex(of: 6) ?? -1
var firstSeven = intArray.firstIndex(of: 7) ?? -1
print("first of Six index: \(firstSix)")
print("first of Seven index: \(firstSeven)")
//first of Six index: 9
//first of Seven index: -1
Swift原生也提供了類似於Kotlin的方法,差別在於Swift會傳的是optional的值,所以我先預設為-1,也可以用if let的方法來處理。
心得:
從上面的過程來看,Kotlin與Swift原生皆已提供很快的方法讓我們找到陣列內符合條件的參數位置,也省去自己寫下一堆冗長的程式碼。又多學到了一些事情,持續加油!