配列(リスト)から集合(セット)を生成するには (toSet)

Java

List から Set に変換する例

import java.util.HashSet;
import java.util.List;
import java.util.Set;

List<String> lst = ...;
Set<String> st = new HashSet<String>(lst);

Scala

Signature:

def scala.collection.Seq[A]#toSet: Set[A]

val set = lst.toSet;

// セットにしてからリストにすることで重複要素を削除
// ただし、順番は保存されない
lst.toSet.toList

単に重複した要素を削除したいだけであれば以下のようにすればよい。順番もできるだけ保持している。要素数が少なければ、いったんSetに変換してしまうよりも速い。

def uniq[A](lst: List[A]): List[A] = {
  lst.foldLeft[List[A]](Nil) { (b, a) =>
    if (b.contains(a)) {
      b;
    } else {
      a :: b;
    }
  }.reverse;
}

Python

set という関数でセットに変換したものを返す。

set(lst)

Ruby / JRuby

Rubyには集合のデータ型がないが、以下は配列から重複を削除する例である。

arr = [10, 20, 30, 40, 50, 30]

# 重複を削除した配列を返し、自身は変更しない
p arr.uniq
# => [10, 20, 30, 40, 50]

# 以下の方法でも結果的に同じ
p arr | []
# => [10, 20, 30, 40, 50]

# 上記方法は元の配列を変更しない
p arr
# => [10, 20, 30, 40, 50, 30]

# 重複を削除した配列に変更する
arr.uniq!
p arr
# => [10, 20, 30, 40, 50]

| 演算子は複数の配列の和集合を取り出す演算子で、空の配列をその演算子に渡せば結果的に配列から重複を削除できる。

Array#uniq, Array#uniq! | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/uniq.html

Array#| | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/=7c.html

Perl

Perlにはセットというものはないが、以下は配列から重複を削除する例である。

my @arr = (1, 2, 3, 4, 5, 4);
my %uniq = map {$_ => 1} @arr;
print(keys %uniq);
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。