如何从Scala中的数组中删除重复项

时间:2017-06-25 06:02:02

标签: scala

我是scala的新手如何从数组中删除重复项。不使用Distict关键字。

我有像这样的数组

Input 

Array(1,2,3,1,3)
=====================

我需要像这样的输出

OutPut
====================
Array(1,2,3)

我的代码是

Val ar=Array(1,2,3,4,5)
for(i<-0  to ar.length-1){
if(ar(i)!=for())..?

我想在不使用Set And List

的情况下编写程序
val dup =ar.foldLeft(Array[Int]()){(a,b)=>if(a contains(b)) a else a :+ b}

我得到了这个解决方案,但它是如何工作的

任何人都可以解释它的背景如何 我试过了

1,2,3,1,2
1==2 false .. else 1 : 

3 个答案:

答案 0 :(得分:2)

不想使用.distinct似乎有点武断。但你可以随时把它变成一套又回来。

Array(1,2,3,1,3).toSet.toArray 
res2: Array[Int] = Array(1, 2, 3)

答案 1 :(得分:1)

这是一种非常低效的算法。它不会使用distinctSetgroupBy

Array(1,2,3,1,3).foldLeft(Array[Int]()){ (acc,elem) =>
  if (acc.contains(elem)) acc else acc :+ elem
}

答案 2 :(得分:0)

如果您可以按排序顺序拥有唯一的数组,则可以对原始数组进行排序,并且只保留与其邻居不相等的元素:

object MyOjbect {

def makeUnique(a: Array[Int]): Array[Int] = { 
    if (a.isEmpty) return Array()

    a.head +: a.sorted.sliding(2).foldLeft(Array[Int]()) { (acc, ele) =>
                   if (ele(0) != ele(1)) acc :+ ele(1) else acc 
                   }
}   

def main(args: Array[String]) {

    println(makeUnique(Array(1,2,3,1,3)).toList)enter code here 
    println(makeUnique(Array(1,1,1,1,1)).toList)
    println(makeUnique(Array()).toList)
    }
}

结果:

List(1, 2, 3)
List(1)
List()