搜索地图列表并返回多个结果

时间:2016-12-07 14:39:00

标签: scala list

我目前是一名学生,正在完成一项工作,但我误解了这个问题。我当时想要获得最新的"最近的"每个数据的价格,但我创建它,以便我单独搜索每个数据。 例如,我会在菜单选项中按1并输入" SK1"平均结果显示,我需要修改这个,所以当我在菜单选项中按1时,我不输入任何内容并显示所有平均值。

这是我当前搜索数据并返回结果的代码。我需要返回所有搜索到的数据。

P.S。 Mapdata是一个" Map(String,List [Int])"

//5 - Show Current data Level
  def handleFive(): Boolean = {
    mnuShowSingleData(currentDataLevel)
    true
  }

// Returns a single result, not a list
  def mnuShowSingleData(data: (String) => (String,Int)) = {
    print("data > ")
    val data2 = data(readLine)
    println(s"${data2._1}: ${data2._2}")
  }

  //Show last element in the list, most current
  def currentDataLevel (data: String): (String, Int) = {
    (data, mapdata.get (data).map(findLast(_)).getOrElse(0))
  }

我理解我正在做什么以及如何搜索单个结果,只是不确定如何修改它以搜索并返回所有数据的最后元素。

措辞更准确;

  

给定Map [String,List [Int]],如何生成Map [String,Int]   对于输入中的每个键,结果值将是最后一个   相应值中的项,如果值为空列表,则为0?   例如,对于此输入:

1 个答案:

答案 0 :(得分:0)

首先,我会将问题重新解释为我认为的问题:

  

给定Map[String, List[Int]],如何为输入中的每个键生成Map[String, Int],结果值将是相应值中的最后一项,如果是0值是一个空列表?例如,对于此输入:

val m = Map("a" -> List(1,2,3), "b" -> List(4,5), "c" -> List[Int]())
  

我想要以下输出:Map("a" -> 3, "b" -> 5, "c" -> 0)

如果这是问题 - 这就是答案:

 m.mapValues(_.lastOption.getOrElse(0))

编辑:纳入OP的代码:

def mnuShowSingleData() = {
  val current = currentDataLevel()
  // just a suggestion, you can obviously play around with the way this is printed:
  print(s"data > ${current.mkString(", ")}") 
}

def currentDataLevel(): Map[String, Int] = {
  mapdata.mapValues(_.lastOption.getOrElse(0))
}

// prints: data > a -> 3, b -> 5, c -> 0
相关问题