如何在Scala中获得一组列表[Array[String]]
我是scala的新手,我有以下代码:如何在Scala中获得一组列表[Array[String]],scala,Scala,我是scala的新手,我有以下代码: val content = List("a b","a b") 给我:List[String]=List(ab,ab) 给我:List[Array[String]]=List(Array(ab),Array(ab)) 我想从列表中得到一组数据,但是split\u data.toSet 给我:scala.collection.immutable.Set[Array[String]]=Set(Array(ab),Array(ab)) 当我想要的时候 scala
val content = List("a b","a b")
给我:List[String]=List(ab,ab)
给我:List[Array[String]]=List(Array(ab),Array(ab))
我想从列表中得到一组数据,但是split\u data.toSet
给我:scala.collection.immutable.Set[Array[String]]=Set(Array(ab),Array(ab))
当我想要的时候
scala.collection.immutable.Set[Array[String]] = Set(Array(a b))
如何做到这一点?在Scala中,与其他集合不同,具有相同值的两个数组不相等:
Array(1, 2, 3) == Array(1, 2, 3) // false
List(1, 2, 3) == List(1, 2, 3) // true
这是因为数组只是Java数组,这些数组与函数式语言中的集合没有相同的语义。在Java中,如果两个数组引用指向内存中的同一数组,则它们是相等的:
val a = Array(1, 2, 3)
a == a // true, it's the same array
a == Array(1, 2, 3) // false, it's two different arrays
因此,如果想要拥有一组唯一的集合,必须将数组转换为Scala序列:
val content = List("a b","a b")
val split_data = content.map(testFile => testFile.split("\t").toSeq) // note the .toSeq
split_data.toSet // set with one element
在Scala中,与其他集合不同,具有相同值的两个数组不相等:
Array(1, 2, 3) == Array(1, 2, 3) // false
List(1, 2, 3) == List(1, 2, 3) // true
这是因为数组只是Java数组,这些数组与函数式语言中的集合没有相同的语义。在Java中,如果两个数组引用指向内存中的同一数组,则它们是相等的:
val a = Array(1, 2, 3)
a == a // true, it's the same array
a == Array(1, 2, 3) // false, it's two different arrays
因此,如果想要拥有一组唯一的集合,必须将数组转换为Scala序列:
val content = List("a b","a b")
val split_data = content.map(testFile => testFile.split("\t").toSeq) // note the .toSeq
split_data.toSet // set with one element
你不能像在另一个答案中解释的那样比较数组。 解决此问题的最简单方法是在
.map
之前进行重复数据消除(转换为设置
):
content.toSet[String].map(_.split("\t"))
这也是一种更有效的方法,因为您最终将
split
ing更少的字符串 你不能像另一个答案中解释的那样比较数组。
解决此问题的最简单方法是在.map
之前进行重复数据消除(转换为设置
):
content.toSet[String].map(_.split("\t"))
这也是一种更有效的方法,因为您最终将
split
ing更少的字符串 等等。。不要那样做。。虽然它输出了预期的结果,但这不是您想要的..等等。。不要那样做。。虽然它输出了预期的结果,但这不是您想要的。错误:扩展函数缺少参数类型
(Scala 2.12.6)@jwvh hm耶。。。我不知道它为什么会这样:/啊,我知道了。。。这是因为toSet
需要一个类型参数,必须明确地告诉它,您想要String
错误:扩展函数缺少参数类型(Scala 2.12.6)@jwvh-hm是的。。。我不知道它为什么会这样:/啊,我知道了。。。这是因为toSet
需要一个类型参数,必须明确地告诉它,您需要String
。