Arrays Scala:哪一个更好-先独立后联合,还是先联合后独立?

Arrays Scala:哪一个更好-先独立后联合,还是先联合后独立?,arrays,list,scala,distinct,union,Arrays,List,Scala,Distinct,Union,如果我有两份清单: listA-100万个字符串 listB-100万字符串 我想将它们合并到第三个listC,它只具有上述两个列表中唯一的值,下面哪种方法更好: 在联合到listC或之前,使用listA和listB的distinct() 生成联合listC,然后在listC上应用distinct 同样的逻辑也适用于阵列吗?让我们看看独特的实现: def distinct: Repr = { val b = newBuilder val seen = mutable.HashSet[

如果我有两份清单:

  • listA-100万个字符串
  • listB-100万字符串
我想将它们合并到第三个listC,它只具有上述两个列表中唯一的值,下面哪种方法更好:

  • 在联合到listC或之前,使用listA和listB的distinct()
  • 生成联合listC,然后在listC上应用distinct

  • 同样的逻辑也适用于阵列吗?

    让我们看看
    独特的
    实现:

    def distinct: Repr = {
      val b = newBuilder
      val seen = mutable.HashSet[A]()
      for (x <- this) {
        if (!seen(x)) {
          b += x
          seen += x
        }
      }
      b.result()
    }
    
    def distinct:Repr={
    val b=新造船商
    val seen=mutable.HashSet[A]()
    
    对于(x让我们看看
    独特的
    实现:

    def distinct: Repr = {
      val b = newBuilder
      val seen = mutable.HashSet[A]()
      for (x <- this) {
        if (!seen(x)) {
          b += x
          seen += x
        }
      }
      b.result()
    }
    
    def distinct:Repr={
    val b=新造船商
    val seen=mutable.HashSet[A]()
    
    对于(x您需要首先执行联合,但您希望以惰性方式执行此操作,以避免在内存中创建联合的集合。类似的操作应该可以:

    val listC = (listA.view union listB).distinct.toList
    

    在计算上,这可能会做一些与Jean发布的内容非常相似的事情,但它有点更好,因为它更好地利用了Scala集合库。

    您需要首先进行联合,但您希望以一种懒惰的方式来做这件事,以避免在内存中创建联合集合。类似这样的事情应该可以工作:

    val listC = (listA.view union listB).distinct.toList
    

    从计算上来说,这可能会做一些与Jean发布的非常类似的事情,但它更好一些,因为它更好地利用了Scala集合库。

    更多的是旁注,但方法1不能保证listC只包含不同的值,因为listA和listB之间的重复项将作为uni的一部分保留正在合并两个列表。您还需要使用选项1对结果listC执行distinct,以保证结果列表中的值不同。更多的是旁注,但方法1并不保证listC只包含不同的值,因为listA和listB之间的重复项将作为合并两个列表的一部分保留。您还需要执行使用选项1在结果列表C上形成一个distinct,以保证结果列表中的值不同。