我是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 :
答案 0 :(得分:2)
不想使用.distinct
似乎有点武断。但你可以随时把它变成一套又回来。
Array(1,2,3,1,3).toSet.toArray
res2: Array[Int] = Array(1, 2, 3)
答案 1 :(得分:1)
这是一种非常低效的算法。它不会使用distinct
,Set
或groupBy
。
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()