kotlin 中的 "for" 迴圈和迭代map
阿新 • • 發佈:2019-01-11
文章目錄
● 場景
● “for” 迴圈
● 迭代map
● 總結
場景
kotlin 中的 “for” 迴圈和迭代 map 與我們熟知的 java 中的有什麼區別呢,有哪些更好的表現形式呢?
“for” 迴圈
● kotlin “for”迴圈結構:for (i in a..b)
● a代表起始值,b代表結束值。..表示區間。例如for (i in 1..100)
● 注意:區間是包含的,也就是1到100(包含100)
下面用整數迭代來玩Fizz-Buzz 遊戲。注意比較java 與 kotlin 寫法區別
//java
package javas;
public class FizzBuzz {
private static String fizzBuzz(int i) {
if(i % 15 == 0){
return "FizzBuzz";
}else if(i % 5 == 0){
return "Buzz";
}else if(i % 3 == 0){
return "Fizz";
}else {
return ""+i;
}
}
public static void main(String[] args){
for (int i = 1; i < 101 ; i++) {
System.out.println(fizzBuzz(i));
}
}
}
//kotlin
package kotlins
fun fizzBuzz(i: Int) = when{
i % 15 == 0 -> "FizzBuzz"
i % 5 == 0 -> "Buzz"
i % 3 == 0 -> "Fizz"
else -> "$i"
}
fun main(args: Array<String>){
for (i in 1..100){//用區間迭代
println(fizzBuzz(i))
}
}
迭代map
● kotlin 迭代 map 的結構: for ((a,b) in map)
● a代表的是 map 的key,b代表的是 map 的 value,a和b是變數,自己命名即可
● ..語法可以用於建立字元區間。例如 for (c in ‘A’..’F’)
//java
package javas;
import java.util.Iterator;
import java.util.TreeMap;
public class IteratingOverMaps {
private static Character[] chars = new Character[]{'A','B','C','D','E','F'};
private static TreeMap<Character, String> binaryReqs = new TreeMap<Character, String>();
public static void main(String[] args){
for(int i = 0; i < chars.length; i++){
String s = Integer.toBinaryString(chars[i]);
binaryReqs.put(chars[i], s);
}
Iterator<Character> iterator = binaryReqs.keySet().iterator();
while(iterator.hasNext()){
Character key = iterator.next();
String s = binaryReqs.get(key);
System.out.println(key + " = " + s);
}
}
}
//kotlin
package kotlins
import java.util.*
fun main(args: Array<String>){
val binaryReps = TreeMap<Char, String>()
for (c in 'A'..'F'){//建立字元區間
val binary = Integer.toBinaryString(c.toInt()) //將 ASCII 碼轉化成二進位制
binaryReps[c] = binary //根據 key 為c 把 binary 存到 map 中
}
for ((letter, binary) in binaryReps){//迭代 map,把 key 和 value 賦值給變數
println("$letter = $binary")
}
}
總結
通過對比發現 kotlin 的優勢:
● 使用範圍更廣泛了(..語法可以建立字元區間)
● 程式碼更簡潔,幹練
如果對你有一點點幫助,請點個贊,你的鼓勵就是我寫作的動力。謝謝!
歡迎長按下圖 -> 識別圖中二維碼 或者 掃一掃 關注我的公眾號: