3
在斯卡拉殼我這樣做:斯卡拉理解與的foreach
import java.util._
import scala.collection.JavaConversions._
val t: SortedMap[String,Int] = new TreeMap[String,Int]() // produces an empty java.util.SortedMap
t("a") = 1; t("b") = 2; t("A") = 3; t("0") = 4
t // prints: res35: java.util.SortedMap[String,Int] = {0=4, A=3, a=1, b=2}, as expected
t foreach println // also prints the (k,v) pairs in the same TreeMap sorted order
但是,下面的語句不打印排序的順序對,它似乎打印出來的散列桶順序,(0 ,4)(b,2)(A,3)(A,1):
for ((k,v) <- t) printf("(%s,%d)%n", k, v)
在其他的答案與用於和foreach似乎一個用於理解應該轉換成使用的foreach的像所以:
「換修真(P < - E)E0被翻譯成e.foreach {當p => E0}」
,但似乎並沒有被這裏發生了什麼。
需要注意的是,如果我創建一個從階 TreeMap中,無論在foreach和用於生產(K,V)的排序順序對如我所料一個階 SortedMap的。看起來像Java TreeMap爲scala轉換的某種方式是不同的。
有關爲何出現此差異的任何意見或想法?
謝謝Daniel,很好的回答! –
@BobYacobellis我只是做得更好。 :-) –
我看到我真正想要的陳述是這樣的:'for(kv <-t)printf(「(%s,%d)%n」,kv._1,kv._2)' –