配列(リスト)から集合(セット)を生成するには (toSet)
Java 2013/11/05
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 2014/11/05
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 2013/10/06
set
という関数でセットに変換したものを返す。
set(lst)
Ruby / JRuby 2016/08/29
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 2013/07/30
Perlにはセットというものはないが、以下は配列から重複を削除する例である。
my @arr = (1, 2, 3, 4, 5, 4);
my %uniq = map {$_ => 1} @arr;
print(keys %uniq);