youtubers tesis sobre sirve resumida que para investigaciones investigacion historia caracteristicas scala

scala - sirve - tesis sobre youtube pdf



Cómo en Scala para encontrar artículos únicos en la Lista (8)

¿Cómo en Scala para encontrar artículos únicos en la lista?


En 2.8, es:

List(1,2,3,2,1).distinct // => List(1, 2, 3)


Haga rodar su propio filtro uniq con la retención de pedidos:

scala> val l = List(1,2,3,3,4,6,5,6) l: List[Int] = List(1, 2, 3, 3, 4, 6, 5, 6) scala> l.foldLeft(Nil: List[Int]) {(acc, next) => if (acc contains next) acc else next :: acc }.reverse res0: List[Int] = List(1, 2, 3, 4, 6, 5)


Imho, todas las interpretaciones de la pregunta son falsas:

¿Cómo en Scala para encontrar artículos únicos en la lista?

Dada esta lista:

val ili = List (1, 2, 3, 4, 4, 3, 1, 1, 4, 1)

el único elemento único en la lista es 2 . Los otros artículos no son únicos.

ili.toSet.filter (i => ili.indexOf (i) == ili.lastIndexOf (i))

lo encontrará.


Si se refiere al Código Rosetta: Cree una secuencia de elementos únicos

val list = List(1,2,3,4,2,3,4,99) val l2 = list.removeDuplicates // l2: scala.List[scala.Int] = List(1,2,3,4,99)

Como List es inmutable, no modificará la List inicial llamando a removeDuplicates

Advertencia: como se menciona en este tweet (!), Esto no conserva el orden:

scala> val list = List(2,1,2,4,2,9,3) list: List[Int] = List(2, 1, 2, 4, 2, 9, 3) scala> val l2 = list.removeDuplicates l2: List[Int] = List(1, 4, 2, 9, 3)

Para un Seq , ese método debería estar disponible en Scala2.8, de acuerdo con el ticket 929 .
Mientras tanto, necesitarás definir un método estático ad-hoc como el que se ve aquí


Un método ad-hoc simple es simplemente agregar la Lista a un Conjunto, y usar desde allí:

val l = List(1,2,3,3,3,4,5,5,6,7,8,8,8,9,9) val s = Set() ++ x println(s)

Produce:

> Set(5, 1, 6, 9, 2, 7, 3, 8, 4)

Esto funciona para un Seq (o cualquier Iterable), pero no es necesario en 2.8, donde el método removeDuplicates probablemente será más legible. Además, no estoy seguro sobre el rendimiento del tiempo de ejecución frente a una conversión más pensada.

Además, tenga en cuenta la orden perdida.


list.toSet lo hará ya que Set por definición solo contiene elementos únicos


La manera más eficiente de preservar la orden de hacer esto sería usar un Set como una estructura de datos auxiliares:

def unique[A](ls: List[A]) = { def loop(set: Set[A], ls: List[A]): List[A] = ls match { case hd :: tail if set contains hd => loop(set, tail) case hd :: tail => hd :: loop(set + hd, tail) case Nil => Nil } loop(Set(), ls) }

Podemos ajustar esto en una sintaxis más agradable usando una conversión implícita:

implicit def listToSyntax[A](ls: List[A]) = new { def unique = unique(ls) } List(1, 1, 2, 3, 4, 5, 4).unique // => List(1, 2, 3, 4, 5)


list.filter { x => list.count(_ == x) == 1 }