影像以照片名稱.extension、cityname、yyyy-mm-dd hh:mm:ss 格式保存
我正在嘗試在 scala中撰寫函式來提供所需的結果。
例如:
john.jpg, USA,2013-09-15 14:08:15
BOB.jpg, UK,2013-09-15 14:08:15
RONY.jpg, USA,2013-09-15 19:08:15
A.PNG, USA,2018-09-15 21:08:15
TONY.jpg, CHINA,2020-09-15 19:08:15
MONY.PNG, CHINA,2021-09-15 21:08:15
RONY.jpg, CHINA,2015-09-15 19:08:15
A.PNG, JAPAN,2019-09-15 21:08:15
預期輸出:
USA01.JPG
UK01.JPG
USA02.JPG
USA03.PNG
CHINA01.JPG
CHINA02.PNG
CHINA03.JPG
JAPAN01.PNG
有 3 張來自美國的圖片,即 usa01、usa02 和 usa03。同樣 china01,china02 和 china03
感謝您的建議或方法。謝謝
uj5u.com熱心網友回復:
我將其分解為步驟以使其更清晰:
scala> val images = List(
| "john.jpg, USA,2013-09-15 14:08:15",
| "BOB.jpg, UK,2013-09-15 14:08:15",
| "RONY.jpg, USA,2013-09-15 19:08:15",
| "A.PNG, USA,2018-09-15 21:08:15",
| "TONY.jpg, CHINA,2020-09-15 19:08:15",
| "MONY.PNG, CHINA,2021-09-15 21:08:15",
| "RONY.jpg, CHINA,2015-09-15 19:08:15",
| "A.PNG, JAPAN,2019-09-15 21:08:15"
| )
val images: List[String] = List(john.jpg, USA,2013-09-15 14:08:15, BOB.jpg, UK,2013-09-15 14:08:15, RONY.jpg, USA,2013-09-15 19:08:15, A.PNG, USA,2018-09-15 21:08:15, TONY.jpg, CHINA,2020-09-15 19:08:15, MONY.PNG, CHINA,2021-09-15 21:08:15, RONY.jpg, CHINA,2015-09-15 19:08:15, A.PNG, JAPAN,2019-09-15 21:08:15)
scala> val props = images.map(_.split(",").map(_.trim)).filter(_.size == 3).map{case Array(x, y, z) => (x, y, z)}
val props: List[(String, String, String)] = List((john.jpg,USA,2013-09-15 14:08:15), (BOB.jpg,UK,2013-09-15 14:08:15), (RONY.jpg,USA,2013-09-15 19:08:15), (A.PNG,USA,2018-09-15 21:08:15), (TONY.jpg,CHINA,2020-09-15 19:08:15), (MONY.PNG,CHINA,2021-09-15 21:08:15), (RONY.jpg,CHINA,2015-09-15 19:08:15), (A.PNG,JAPAN,2019-09-15 21:08:15))
scala> val sortedProps = props.sortBy(_._3)
val sortedProps: List[(String, String, String)] = List((john.jpg,USA,2013-09-15 14:08:15), (BOB.jpg,UK,2013-09-15 14:08:15), (RONY.jpg,USA,2013-09-15 19:08:15), (RONY.jpg,CHINA,2015-09-15 19:08:15), (A.PNG,USA,2018-09-15 21:08:15), (A.PNG,JAPAN,2019-09-15 21:08:15), (TONY.jpg,CHINA,2020-09-15 19:08:15), (MONY.PNG,CHINA,2021-09-15 21:08:15))
scala> val relevantProps = sortedProps.map{ case (fname, cntry, date) => (fname.split("\\.")(1).toUpperCase, cntry) }
val relevantProps: List[(String, String)] = List((JPG,USA), (JPG,UK), (JPG,USA), (JPG,CHINA), (PNG,USA), (PNG,JAPAN), (JPG,CHINA), (PNG,CHINA))
scala> val (files, counts) = relevantProps.foldLeft((List[String](), Map[String, Int]())) { case ((res, counts), (ext, cntry)) =>
| val count = counts.getOrElse(cntry, 0) 1
| ((s"$cntry$count.$ext") :: res, counts.updated(cntry, count))
| }
val files: List[String] = List(CHINA3.PNG, CHINA2.JPG, JAPAN1.PNG, USA3.PNG, CHINA1.JPG, USA2.JPG, UK1.JPG, USA1.JPG)
val counts: scala.collection.immutable.Map[String,Int] = Map(USA -> 3, UK -> 1, CHINA -> 3, JAPAN -> 1)
scala> val result = files.reverse
val result: List[String] = List(USA1.JPG, UK1.JPG, USA2.JPG, CHINA1.JPG, USA3.PNG, JAPAN1.PNG, CHINA2.JPG, CHINA3.PNG)
或單線只是為了好玩:
List(
"john.jpg, USA,2013-09-15 14:08:15",
"BOB.jpg, UK,2013-09-15 14:08:15",
"RONY.jpg, USA,2013-09-15 19:08:15",
"A.PNG, USA,2018-09-15 21:08:15",
"TONY.jpg, CHINA,2020-09-15 19:08:15",
"MONY.PNG, CHINA,2021-09-15 21:08:15",
"RONY.jpg, CHINA,2015-09-15 19:08:15",
"A.PNG, JAPAN,2019-09-15 21:08:15"
).map(_.split(",").map(_.trim))
.filter(_.size == 3).map{case Array(x, y, z) => (x, y, z)}
.sortBy(_._3)
.map{ case (fname, cntry, date) => (fname.split("\\.")(1).toUpperCase, cntry) }
.foldLeft((List[String](), Map[String, Int]())) { case ((res, counts), (ext, cntry)) =>
val count = counts.getOrElse(cntry, 0) 1
((s"$cntry$count.$ext") :: res, counts.updated(cntry, count))
}._1.reverse
輸出:
val res0: List[String] = List(USA1.JPG, UK1.JPG, USA2.JPG, CHINA1.JPG, USA3.PNG, JAPAN1.PNG, CHINA2.JPG, CHINA3.PNG)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/413848.html
標籤:
