Scala中zip或者zipWithIndex的计数器用法
你要遍歷一個有序集合,同時你又想訪問一個循環(huán)計數(shù)器,但最重要的是你真的不需要手動創(chuàng)建這個計數(shù)器。
解決方案:
????使用zipWithIndex或者zip方法來自動地創(chuàng)建一個計數(shù)器,假設(shè)你有一個有序集合days,那么你可以使用zipWithIndex和counter來打印帶有計數(shù)器的集合元素:
scala>?val?days?=?Array("Sunday",?"Monday",?"Tuesday",?"Wednesday","Thursday",?"Friday",?"Saturday") days:?Array[String]?=?Array(Sunday,?Monday,?Tuesday,?Wednesday,?Thursday,?Friday,?Saturday)scala>?days.zipWithIndex.foreach{case(day,count)?=>?println(s"$count?is?$day")} 0?is?Sunday 1?is?Monday 2?is?Tuesday 3?is?Wednesday 4?is?Thursday 5?is?Friday 6?is?Saturday????同樣,你可以使用for循環(huán)來打印計數(shù)器和集合元素
scala>?for((day,count)?<-?days.zipWithIndex)?{|???println(s"$count?is?$day")|?} 0?is?Sunday 1?is?Monday 2?is?Tuesday 3?is?Wednesday 4?is?Thursday 5?is?Friday 6?is?Saturday????zipWithIndex的計數(shù)器都是從0開始,如果你想指定開始的值,那么你可以使用zip Stream:
scala>?for((day,count)?<-?days.zip(Stream?from?1))?{|???println(s"$count?is?$day")|?} 1?is?Sunday 2?is?Monday 3?is?Tuesday 4?is?Wednesday 5?is?Thursday 6?is?Friday 7?is?SaturdayDiscussion
????當(dāng)有序集合調(diào)用zipWithIndex的時候,它會返回一個有序的二元組集合:
scala>?val?list?=?List("a",?"b",?"c") list:?List[String]?=?List(a,?b,?c)scala>?list.zipWithIndex res3:?List[(String,?Int)]?=?List((a,0),?(b,1),?(c,2))????因為zipWithIndex是在一個已經(jīng)存的有序集合上基礎(chǔ)上建立一個新的有序集合,你可以在調(diào)用zipWithIndex之前調(diào)用view:
scala>?val?zwv?=?list.view.zipWithIndex zwv:?scala.collection.SeqView[(String,?Int),Seq[_]]?=?SeqViewZ(...)????就像上面這個例子里面看到的,它創(chuàng)建了一個lazy view在原有的List基礎(chǔ)上,所以這個元組集合并不被會被創(chuàng)建,直到它被調(diào)用的那一刻。正因有這種特性,我們推薦在調(diào)用zipWithIndex之前先調(diào)用view方法。
????zip和zipWithIndex方法都返回一個有序二元祖集合。因此,你的foreach方法也可以寫成下面這樣,雖然這比起解決方案中的方法,可讀性略差。
scala>?days.zipWithIndex.foreach(d?=>?println(s"${d._2}?is?${d._1}")) 0?is?Sunday 1?is?Monday 2?is?Tuesday 3?is?Wednesday 4?is?Thursday 5?is?Friday 6?is?Saturday????在之前的例子中我們曾經(jīng)見過,可以通過一個for循環(huán)加range來創(chuàng)建這個計數(shù)器:
scala>?val?fruits?=?Array("apple",?"banana",?"orange") fruits:?Array[String]?=?Array(apple,?banana,?orange)scala>?for?(i?<-?0?until?fruits.size)?println(s"element?$i?is?${fruits(i)}") element?0?is?apple element?1?is?banana element?2?is?orange總結(jié)
以上是生活随笔為你收集整理的Scala中zip或者zipWithIndex的计数器用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: scikit-learn学习笔记(三)G
- 下一篇: TensorFlow学习笔记(六)Var