Suponha que eu tenha
val dirty = List("a", "b", "a", "c")
Existe uma operação de lista que retorna "a", "b", "c"
Dê uma olhada no ScalaDoc for Seq ,
scala> dirty.distinct
res0: List[java.lang.String] = List(a, b, c)
Atualize . Outros sugeriram usar em Set
vez de List
. Tudo bem, mas esteja ciente de que, por padrão, a Set
interface não preserva a ordem dos elementos. Você pode querer usar uma implementação de Set que preserva explicitamente a ordem, como collection.mutable.LinkedHashSet .
Map[String, File]
, onde as chaves são a parte do nome do arquivo de interesse. Assim que o mapa for construído, você pode chamar ovalues
método para obter umIterable
dos valores - as chaves serão todas distintas por construção.groupBy
membro descala.collection.Iterable[A]
.scala.collection.immutable.List
agora tem um.distinct
método.Portanto,
dirty.distinct
agora é possível fazer chamadas sem converter para umSet
ouSeq
.fonte
.distinct
não está definido parascala.collection.Iterable[A]
. Então, nesse caso, você teria que usar upgradedirty
para aSeq
ou a deSet
qualquer maneira (ou seja, usando um.toList
,.toSeq
ou.toSet
membros) para que isso funcione.Antes de usar a solução do Kitpon, pense em usar um
Set
ao invés de umList
, isso garante que cada elemento seja único.Como a maioria das operações de lista (
foreach
,map
,filter
, ...) são os mesmos para os conjuntos e listas, mudando coleção poderia ser muito fácil no código.fonte
Usar Set em primeiro lugar é a maneira certa de fazer isso, é claro, mas:
Trabalho. Ou apenas
toSet
porque suporta oSeqTraversable
interface.fonte
Set
implementaTraversable
, nãoSeq
. A diferença é queSeq
garante uma ordem aos elementos, enquantoTraversable
não.inArr.distinct foreach println _
fonte
A maneira algorítmica ...
fonte