Scala if Statements and for Loopexpress
scala 中的 if 和其它編程語言中不一樣的一點是 if 表達式的返回值。好比下面這樣,編程
val configFilePath = if (configFile.exists()) { configFile.getAbsolutePath } else { configFile.createNewFile() configFile.getAbsolutePath }
configFilePath: String = /Applications/IntelliJ IDEA 15.app/Contents/bin/somefile.txtapp
一個基本的for循環語句,編程語言
val dogBreeds = List("Doberman", "Yorkshire Terrier", "Dachshund", "Scottish Terrier", "Great Dane", "Portuguese Water Dog") for (bread <- dogBreeds) println(bread)
表達式 oop
bread <- dogBreeds
叫作generator expression,這樣命名是由於它從一個集合裏產生一個個體值。left arrow operator (<-) 是用來遍歷一個集合的。好比下面這樣,spa
for (i <- 1 to 10) println(i)
在for循環中,能夠過濾數據,以下,scala
val dogBreeds = List("Doberman", "Yorkshire Terrier", "Dachshund", "Scottish Terrier", "Great Dane", "Portuguese Water Dog") for (bread <- dogBreeds if bread.contains("Terrier") ) println(bread)
還可使用多個過濾條件,code
for (bread <- dogBreeds if bread.contains("Terrier") if !bread.startsWith("Yorkshire") ) println(bread)
這兩種方式是等價的,get
for (bread <- dogBreeds if bread.contains("Terrier") && !bread.startsWith("Yorkshire") ) println(bread)
上面那段話的意義就是,for 循環中的 yield 會把當前的元素記下來,保存在集合中,循環結束後將返回該集合。Scala 中 for 循環是有返回值的。若是被循環的是 Map,返回的就是 Map,被循環的是 List,返回的就是 List,以此類推。generator
scala> val filteredBreeds = | for (breed <- dogBreeds | if breed.contains("Terrier") && !breed.startsWith("Yorkshire") | ) yield breed filteredBreeds: List[String] = List(Scottish Terrier) scala> scala> filteredBreeds.toString() res3: String = List(Scottish Terrier)
下面遍歷Map,
scala> val map = Map("key1" -> "value1", "key2" -> "value2", "key3" -> "value3") map: scala.collection.immutable.Map[String,String] = Map(key1 -> value1, key2 -> value2, key3 -> value3) scala> val temp_map = for (m <- map | if m._1.equals("key1") | ) yield m temp_map: scala.collection.immutable.Map[String,String] = Map(key1 -> value1) scala> temp_map.toString() res4: String = Map(key1 -> value1)
=============END=============