Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scala中获得一组列表[Array[String]]_Scala - Fatal编程技术网

如何在Scala中获得一组列表[Array[String]]

如何在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

我是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