你可以在ruby中执行以下操作:
l = [[1, 2], [3, 4], [5, 6]]
m = l.map {|(a, b)| a+b}
Run Code Online (Sandbox Code Playgroud)
但你不能在scala中执行以下操作:
val a = List((1, 2), (3, 4), (5, 6))
a.map((f, s) => f + s)
<console>:9: error: wrong number of parameters; expected = 1
a.map((f, s) => f + s)
Run Code Online (Sandbox Code Playgroud)
相反,你必须这样做:
a.map { case (f, s) => f + s }
Run Code Online (Sandbox Code Playgroud)
我发现这个相当冗长,因为scala定义了一个"元组"类型,我期待它也能在它之上提供语法糖,以便像上面那样隐式匹配.是否有一些深层原因导致不支持这种匹配?有更优雅的方式吗?
我有一个java.util.Treemap[Long, Int]Scala.我需要做的是将Treemap中的值转换为Array [Int].
我可以得到一个Iterator[Int]或Collection[Int]来自TreeMap,但我不知道如何将这些转换为Array[Int].
任何建议,将不胜感激.
所以我有这个2 collections:
import collection.mutable.ListBuffer
val list1 = ListBuffer[(String, String)]()
list1 += (("Italy", "valid"))
list1 += (("Germany", "not valid"))
list1 += (("USA", "not valid"))
list1 += (("Romania", "valid"))
val list2 = ListBuffer[String]()
list2 += "Germany"
list2 += "USA"
list2 += "Romania"
list2 += "Italy"
list2 += "France"
list2 += "Croatia"
Run Code Online (Sandbox Code Playgroud)
我想得到包含具体的公共国家的新列表,condition例如valid结果将是新列表:
Italy, Romania
Run Code Online (Sandbox Code Playgroud) 我想用其名称压缩一个月的索引:
val res = for(i <- 1 to 12) {
val m = DateTime.parse(i.toString, DateTimeFormat.forPattern("mm").withLocale(Locale.US))
yield (i, m.monthOfYear().getAsString)
}
Run Code Online (Sandbox Code Playgroud)
为什么res是Unit?
请提供有关算法和实现的建议,以便比较Scala中很长列表中的元素.我有一个包含数千个字符串的列表(来自SQL),我需要将每个列表元素与此列表中的所有其他元素进行比较.
因此,我需要获取元组列表:List[(String, String, Boolean)]前两个元素是匹配的字符串,第三个是结果.
对于N个元素的列表,我的算法到目前为止如下:
码:
/**
* Compare head of the list with each remaining element in this list
*/
def cmpel(
fst: String, lst: List[String],
result: List[(String, String, Boolean)]): List[(String, String, Boolean)] = {
lst match {
case next :: tail => cmpel(fst, tail, (fst, next, fst == next) :: result)
case nill => result.reverse
}
}
/**
* Compare list elements in all combinations of two
*/
def cmpAll(lst: List[String],
result: List[(String, …Run Code Online (Sandbox Code Playgroud)