2016-05-05 3 views
-1

は、私は次の配列を持っている:各行のデータセット内の複数の文字列をチェックする方法は?

Array(book, chalk, book, eraser), 
Array(book, chalk, book, pen), 
Array(book, chalk, book, pencil), 
Array(book, chalk, chalk, eraser), 
Array(book, chalk, chalk, pen), 
Array(book, chalk, chalk, pencil), 
Array(book, chalk, eraser, pen) 
Array(book, chalk, eraser, pencil), 
Array(book, chalk, pen, pencil) 
Array(book, eraser, book, pen), 
Array(book, eraser, book, pencil), 
Array(book, eraser, chalk, eraser) 

は、私は別の文字列を持つ配列を削除したいです。例:Array(book,chalk,eraser,pencil)を削除する必要があります。

私はそれをどのように行うことができますか?

答えて

1

あなたは、単に使用することができます重複しての始まりである場合

val arr = Array(Array("book","chalk", "pencil","eraser"),Array("book","chalk", "book","pen"),Array("book","chalk", "book","pencil"),Array("book","chalk", "chalk","eraser"),Array("book","chalk", "chalk","pen")) 

arr.filter(x => x.length != x.toSet.size) 
+0

または明快さの非常に小さな増加のための 'x.toSet'ではなく' x.distinct'です。 –

+0

ありがとうSudhir .Its working – Ajith

+0

@TheArchetypalPaulはAjithの要件に従って、 'toSet'は順序が同様に維持されるため、少し高価です(有意ではないかもしれません)。 –

0

代わりの明確な、あなたは、それが全体の配列を横断していないはずなので、もう少し効率的になり、単純なカスタム関数を使用することができます配列:

import scala.collection.mutable 

def hasDuplicate[T](arr: Array[T]): Boolean = { 
    val seen = mutable.HashSet[T]() 
    var seenBefore = false 
    var i = 0 
    while (!seenBefore && i < arr.length) { 
    val v = arr(i) 
    seenBefore = seen.contains(v) 
    seen += v 
    i += 1 
    } 
    seenBefore 
} 

val input = Array(Array("book","chalk", "pencil","eraser"),Array("book","chalk", "book","pen"),Array("book","chalk", "book","pencil"),Array("book","chalk", "chalk","eraser"),Array("book","chalk", "chalk","pen")) 
input.filterNot(hasDuplicate) 
関連する問題