Kotlin (2): for-loop

 

(照片說明: 在路旁賣糖葫蘆的小販,衛生堪慮,在泥土堆旁製作糖葫蘆,風飛沙,完全沒有清潔設備,沒洗手,也沒清洗的步驟,人來人往,把東西賣不知情的人們,仔細思考後,這小販就如同獨立的app開發者,其實大家跟他的處境一樣.就是克難,資金缺乏,只能走一步算一步.)


其實Kotlin 有一個官方網站,這裡有很多資源,對開發者來說很重要: https://kotlinlang.org/docs/home.html

-------------------

要講FOR-LOOP之前, 我們可以順便了解Array 跟 collections.

因為這兩個都需要用到for-loop.

for (item in collection)

print(item)

or

for (item: Int in ints) { // ... }

or

// method 2
 for (i in 0 until collection.size)
 { 
    print("${collection[i]} ")
 }
-----

example:

val items = listOf("apple", "banana", "kiwifruit") 

//val items = listOf<String>()  //this will be a empty list.

for (item in items) {

    println(item)

}

或是

val items = listOf("apple", "banana", "kiwifruit")

for (index in items.indices) {

    println("item at $index is ${items[index]}")

}

上面是基本款的FOR-LOOP使用方法. ,注意上面Listof方法是collections.

----

range expression:

To iterate over a range of numbers, use a range expression:

for (i in 1..3) {

    println(i)

}

println("---")

for (i in 6 downTo 0 step 2) {

    println(i)

}

output:

1 2 3 --- 6 4 2 0

---

然後有個問題: 1..3可以,那3..1可以嗎?

for (i in 3..1) {

    println(i)

}

答案是: 不可以的.

什麼都沒有.

要改用 10 downTo 1 


----

神奇的indices:  iterate through an array index.

 var language = arrayOf("Ruby", "Kotlin", "Python", "Java")

    for (idx in language.indices) {

        // printing array elements having even index only

        if (idx%2 == 0)

            println(language[idx])

    }

---

神奇的withIndex:

for ((index, value) in array.withIndex()) {

    println("the element at $index is $value")

}


---

Kotlin建立array陣列的方法跟Java不同:

可以使用arrayOf()intArrayOf()charArrayOf()booleanArrayOf()longArrayOf()shortArrayOf()byteArrayOf()函數創建Kotlin array。

但只要記住建立array時他會出現arrayOf之字樣.


var myArray1 = arrayOf(1,10,4,6,15)  
var myArray2 = arrayOf<Int>(1,10,4,6,15)  
val myArray3 = arrayOf<String>("Ajax","Prake","Michel","John","Curry")  
var myArray4= arrayOf(1,10,4, "Ajax","Prake")
var myArray5: IntArray = intArrayOf(5,10,20,12,15)

然後,要注意的是 除了Array 外,還有一種東西叫collections.

Collection types, such as Iterable, Collection, List, Set, Map.

然後它的initial 方式跟array的initial方式很像.

建立list 則是listOf字樣. mapOf, setOf 等集合的都是同樣的初始方法. 但要記得沒有Mutable字樣的都是唯獨屬性.在初始化後都不能add,delete 元素.

An arrayListOf() is a function of ArrayList class. ArrayList is mutable which means it provides both read am write functionalities. The arrayListOf() function returns an ArrayList type.

 var arrayList = arrayListOf<Int>(4,7,12)  
      for(element in arrayList){  
        println(element)  
    }  
  1. var intArrayList: ArrayList<Int> = arrayListOf<Int>(1,2,3)  
  2. var stringArrayList: ArrayList<String> = arrayListOf<String>("Ajay","Vi","Prakash")  
  3. var anyArrayList: ArrayList<Any> = arrayListOf<Any>(1,2,3,"Ajay","Vi","Prakash")  

有一個Any type.

還可以直接用println( list.get(2)) 的方式取得元素值.

有get就有set:   list.set(2,"Rohan")  

PS: 但這樣不是有點矛盾,之前提到沒有Mutable字樣的都是唯獨的,那set可以用嗎?

answer: 對的,listOf產生出來的集合是唯獨屬性,在一開始初始化元素後,就不能再adding and removing elements.但記得這是增加移除元素,但若不是增加/移除元素,而是修改set/get已存在的元素值 ,這是可以的喔.這有點會讓人搞混.它的唯獨屬性是指元素數量與元素本身,不是指元素的內容/值.所以元素值是可變的喔.

------

iterator() function:

val itr = list.iterator()  
   while(itr.hasNext()) {  
        println(itr.next())  
  }  

-------------

然後來看看這個重要的println:這個${---.---}應該會非常常用到應該會非常常用到

  1. class Employee(var id: Int, var name: String, var phone: Int, var city: String)  


  1. fun main(args: Array<String>){  
  2.     val arrayList: ArrayList<Employee> = arrayListOf<Employee>()  
  3.     val e1 = Employee(101"Ajay"55555"Delhi")  
  4.     val e2 = Employee(102"Rahul"44443"Mumbai")  
  5.     val e3 = Employee(103"Sanjay"45422"Noida")  
  6.     arrayList.add(e1)  
  7.     arrayList.add(e2)  
  8.     arrayList.add(e3)  
  9.   
  10.     for (e in arrayList) {  
  11.         println("${e.id} ${e.name} ${e.phone} ${e.city}")  
  12.     }  
  13. }  

Output:

101 Ajay 55555 Delhi
102 Rahul 44443 Mumbai 
103 Sanjay 45422 Noida

ps:
fun printSum(a: Int, b: Int) {
    println("sum of $a and $b is ${a + b}")
}
可以看到print內列印變數值的方法,這樣就擺脫了Java 平常都用+的方法.

------

所以上面要了解 Array 與Collection 的不同.各種初始化的方式會讓你眼花撩亂.
for-loop大多都是需要配合上面提到的兩個.



留言

這個網誌中的熱門文章

最爛的銀行服務-玉山銀行

Mark App Design Apps - Terms and Privacy Policy (服務條款,隱私權政策)

SMR疊瓦式hdd致命缺陷被解決????!!!

google play 正式發布前測試報告...非常好用.

更改google drive預設存放目錄位置Change Google Drive Default Folder Location in Windows

ios app 上架時app icon要注意事項

舊有app在Android 12 閃退問題& app Splash screens

app bundle and bundletool. 關於aab安裝問題

關於google play console app應用程式簽署

Google Play badge徽章產生器