集合型

読み:しゅうごうがた
品詞:名詞

論理型を集めて扱うようなデータ型のこと。構造化型の一つ。

目次

Delphiを含むPascalで使われている特徴的な型である。

CC++C#などには、相当するものがない。

Delphi

0以上の要素を持つ型として使われる。

例えば、次のように定義する。

type Hoge = set of (A, B, C, D, E, F);

var Fuga: Hoge;

実際の使用例は次の通り。

Fuga := []; // 空集合

Fuga := [B, E]; // BとE

計算も可能である。

Fuga := Fuga - [E]; // Eを抜く

Fuga := [A, B, C] + [C, D]; // 結果、Fugaは[A, B, C, D]

if文で、要素が含まれるかどうかの判別処理も書くことができる。

if (B in Fuga) then ...;

集合型に使える演算子(集合演算子)は、次のものがある。

  • +
  • -
  • *
  • <=
  • >=
  • =
  • <>
  • in

C

Cには相当する機能がないため、同等のことをするにはビット演算を用いることになる。

上の例を似たように扱うため、例えば次のような列挙型を定義するとする。

typedef enum { A = 1, B = 2, C = 4, D = 8, E = 16, F = 32 } Hoge;

Hoge Fuga;

この時、次のようにできる。

Fuga = 0; // 空集合

Fuga = B | E; // BとE

計算はビット演算で代用する。

Fuga &= ~E; // Fuga := Fuga - [E];

Fuga = (A | B | C) | (C | D); // Fuga := [A, B, C] + [C, D];

if文で、要素が含まれるかどうかの判別処理は、次のようにする。

if (Fuga & B) { ... };

処理は不可能ではなく、現実にCでこのように書かれた処理系は数多存在するが、これを「集合型」と呼ぶことはない。

C++

C++でも上と同等の記述は可能だが、Fuga = 0;はエラーになるので注意。次のように書かねばならない。

Fuga = static_cast<Hoge>(0);

これ以上を望むなら、素直に集合型のclassを作った方がよいだろう。

用語の所属
データ型
構造化型

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club