2017-07-01 251 views
1

序列最小/最大,我想有一个val the_min,将得到一个序列中的最小值定义为:斯卡拉找到元组

def datesSequence(): Seq[(String, String, String)] = { 
.... 
} 

由于序列的格式输出:

println(datesSequence().map { case (y: String, m: String, d: String) => s"$y-$m-$d" } mkString(", ")) 

2017年5月13日,2017年5月12日,2017年5月11日,2017年5月10日,2017年5月9日,2017年5月8日 ,2017年5月7日,2017年-05-06,2017-05-05,2017-05-04, 2017-05-03,... 2017-06-02

我尝试具有简单的减少对这样的结构以获得最小或最大没有工作..

用于上述例子中的所希望的输出(2017年5月13日和2017/06之间的日期/ 02)将是: 分钟:20170513 最大:20170601

感谢

+1

你为什么不尝试工作?问题是什么? – Dima

回答

3

现在的元组进行yyyyMMdd形式,你可以得到最小值:

datesSequence().minBy(_.toString) 

作为一个侧面说明,而这是给定条件的快速和肮脏的解决方案,想想代表您的日期是真实Date

2

如果我正确理解你的问题,你可以简单地应用min,max添加到您提供的日期字符串列表中(如果格式正确)在填充yyyymmdd格式):

val dateSeq: Seq[(String, String, String)] = Seq(
    ("2017", "5", "16"), 
    ("2017", "6", "1"), 
    ("2017", "5", "13"), 
    ("2017", "5", "28"), 
    ("2017", "6", "2"), 
    ("2017", "5", "20"), 
    ("2017", "5", "25") 
) 

// Not needed if month and day in the source list were already properly padded 
def padded(s: String) = if (s.length < 2) "0" + s else s 

val formatedDateSeq = dateSeq.map{ case (y, m, d) => y + padded(m) + padded(d) } 

formatedDateSeq.max 
// res1: String = 20170602 

formatedDateSeq.min 
// res2: String = 20170513 
1

真的很简单。只需告诉minBy()maxBy()方法如何测量元组。

dateSeq.minBy(x => x._1+x._2+x._3) //res0: (String, String, String) = (2017,05,03) 
dateSeq.maxBy(x => x._1+x._2+x._3) //res1: (String, String, String) = (2017,06,02) 
+0

为什么不只是'dateSeq.min','dateSeq.max'?如果你非常渴望为他做家庭作业,那么你至少可以向他展示如何一次完成。 – Dima