配列の重複除去 ① 一次元配列
テーブルの指定列の値を一旦配列に格納し、重複除去してリストを作成するとき、いつも辞書(連想配列)を使っている。
完全にパターン化しているのに、そういえば関数化していなかった。
みんな大好き連想配列は、
- key
- item
で構成されている。普通の辞書で言えば、両者の関係は
- key リンゴ
- item バラ科リンゴ属の落葉高木樹。またはその果実のこと。
のような感じか(keyが「見出し語」で、itemが「意味」)。
そして、keyは重複が許されないことを、いつも重複除去に利用してきた。
関数にするなら、こんな感じだ。
Function RemovalDuplicateArray(source_array As Variant) As Variant ' 重複除去用の辞書(連想配列) Dim Dict As Object Set Dict = CreateObject("Scripting.Dictionary") Dim a As Variant For Each a In source_array ' 配列内の各値を、辞書に格納する。 ' 重複除去が目的のため、itemは不問。今回は「1」とした。 Dict(a) = 1 Next ' 辞書のkeyが、重複除去後の配列として取り出せる。 RemovalDuplicateArray = Dict.keys End Function
早速、確認してみよう。
Sub ArrayTest() Dim arr As Variant arr = Array(1, 2, 3, 2, 1, 4, 5) arr = RemovalDuplicateArray(arr) MsgBox Join(arr, ",") End Sub
結果は以下のとおり、二回登場した「1」「2」が除去されている。
以上が基本形。このままでも使えるが、何かと使い勝手が悪い。
ということで、次回に続きます。
参考まで。