我正在这个墙上敲我的头.(fyi,我还不是scala pro,但我很喜欢它)
假设我们有这个元组列表:
val data = List(('a', List(1, 0)), ('b', List(1, 1)), ('c', List(0)))
Run Code Online (Sandbox Code Playgroud)
该清单有这个签名:
List[(Char, List[Int])]
Run Code Online (Sandbox Code Playgroud)
我的任务是从"数据"中的元组中获取"List [Int]"元素,其关键是,例如,字母"b".
换句话说,如果我实现像"findIntList(data,'b')"这样的方法,那么我期待List(1,1)的结果
为了完成图片,我尝试了以下方法.问题是,所有的方法(除了方法1,我使用一个明确的"返回"),我要么得到一个List[Option]或List[Any]对象回来,我不知道如何从中提取" List[Int]"信息
方法1:
data.foreach { elem => if (elem._1 == char) return elem._2 }
Run Code Online (Sandbox Code Playgroud)
方法2:
data.find(x=> x._1 == ch)
Run Code Online (Sandbox Code Playgroud)
方法3:
for (elem <- data) yield elem match {case (x, y: List[Bit]) => if (x == char) y}
Run Code Online (Sandbox Code Playgroud)
方法4:
for (x <- data) yield if (x._1 == char) x._2
Run Code Online (Sandbox Code Playgroud)
Jen*_*der 18
许多方法之一:
data.toMap.get('b').get
Run Code Online (Sandbox Code Playgroud)
toMap将元组的列表转换为Map从元组的第一个元素到第二个元素的a元组.get为您提供给定键的值并返回一个Option,因此您需要另一个get实际获取列表.
或者您可以使用:
data.find(_._1 == 'b').get._2
Run Code Online (Sandbox Code Playgroud)
注意:只有Option当你可以保证你有一个Some而不是一个时才使用None.有关如何使用Option idiomatic的信息,请参见http://www.scala-lang.org/api/current/index.html#scala.Option.
更新:使用不同方法查看的结果类型的说明
方法2:find返回Option [List [Int]],因为它无法保证找到匹配的元素.
方法3:这里你基本上做了一个map,即你将一个函数应用到你的集合的每个元素.对于您要查找的元素,该函数返回List [Int],包含值(),该Unit值大致相当于voidJava,但实际类型.因为'List [Int]'和'Unit'的唯一常见超类型是'Any',所以你得到一个'List [Any]'作为结果.
方法4与#3基本相同
| 归档时间: |
|
| 查看次数: |
13436 次 |
| 最近记录: |