有没有一种简单的方法可以将列表的值提取到Scala中的元组中?
基本上就像是
"15,8".split(",").map(_.toInt).mkTuple //(15, 8)
Run Code Online (Sandbox Code Playgroud)
或者我可以做的其他方式
val (x, y) = "15,8".split(",").map(_.toInt)
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个scala函数,从tweets生成n-gram.
该函数将采用两个参数,首先是字符串列表(我们要检查的推文)和一个整数n.如果我们将n设置为2(默认值),那么函数的结果将是2元组的HashMultiset,同样如果我们将其设置为3,那么结果将是3元组的HashMultiset.
有没有办法定义这样的功能?我想明确我的输入,所以我不想只是将函数定义为返回Any的MultiSet.
这是我到目前为止的存根函数,它只适用于n == 2:
def extract_ngrams(tweets:List[String], n:Int=2):HashMultiset[(String,String)] = {
val result = HashMultiset.create[(String,String)]()
result.add(("a", "a"))
result
}
Run Code Online (Sandbox Code Playgroud) 在我的主程序中,我收到类似 - key1=value1 key2=value2 的输入
现在我想要的是用它创建一个地图。我知道执行此操作的命令式方法,我将获得可以 foreach 的 Array[String],然后用“=”分割,然后可以使用键和值来形成 Map。
有没有一种好的功能性和可读性的方法来实现这一点?另外,如果我可以避免可变映射并且我想避免初始虚拟值初始化,那就太好了。
def initialize(strings: Array[String]): Unit = {
val m = collection.mutable.Map("dummy" -> "dummyval")
strings.foreach(
s => {
val keyVal:Array[String] = s.split("=")
m += keyVal(0) -> keyVal(1)
})
println(m)
}
Run Code Online (Sandbox Code Playgroud)