1. ホーム
  2. scala

Scala で List からユニークなアイテムを見つける方法

2023-07-16 08:14:38

質問

ScalaでListのユニークな項目を見つけるにはどうしたらいいですか?

どのように解決するのですか?

最も効率的な順序保持の方法として、このような場合は Set を補助的なデータ構造として使用することです。

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)
}

暗黙の変換を使って、これをより良い構文で包むことができます。

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)