在List [List [String]]中查找每个子列表中第一个元素的最大值和最小值

时间:2016-10-13 12:46:23

标签: scala

我有一个像List[(String, List[List[String]])]这样的数据结构。我需要在List[List[String]]中找到每个子列表中第一个元素的最大值和最小值:

我就是这样做的:

val timestamp_col_ind = 1

val sorted = processed.map(list => (list._1,list._2.sortWith(_.productElement(timestamp_col_ind).toString.toLong < _.productElement(timestamp_col_ind).toString.toLong)))

然后我相应地使用last.apply(timestamp_col_ind).toString.toLonghead.apply(timestamp_col_ind).toString.toLong访问最大和最小元素。

但问题是子列表没有按第一个元素排序。我做错了什么?

1 个答案:

答案 0 :(得分:0)

就像阿尔贝托所说的那样,提供一个完整的例子以避免混淆总是好的;见https://stackoverflow.com/help/mcve。以下是您想要的解决方案:

// initialise structure
val data = List(("foo", List(List("2", "b", "b"), List("3", "c", "c"), List("1", "a", "a"))))
// sort by long value of first element of sublists
val sortedData = data.map { case (str, lst) => (str, lst.sortBy(_.head.toLong)) }
// get minimum and maximum
val min = sortedData.map { case (str, lst) => (str, lst.head) }
val max = sortedData.map { case (str, lst) => (str, lst.last) }

结果:

min: List[(String, List[String])] = List((foo,List(1, a, a)))
max: List[(String, List[String])] = List((foo,List(3, c, c)))

这假设子列表永远不会为空,即它们确实有head