LabVIEWでプログラムを書くときの強みの一つは、ユーザーインタフェースであるフロントパネルをドラッグアンドドロップの操作だけで簡単に構築することができることだと思います。
本ブログのまずこれのシリーズでは主にプログラムのアルゴリズムの部分の書き方について解説してきましたが、アルゴリズムを知っているだけではプログラムは書けず、どのような選択肢があるかということも知っておく必要があります。
使い方集は、まずこれのシリーズでステートマシンまでの知識はある程度知っている前提で、アルゴリズム以外に関わるプログラムの書き方について紹介するシリーズです。
本記事ではデータタイプの中の一つであるコレクションデータタイプについて紹介しています。
コレクションデータタイプとは
プログラミングを行う上で、数字やテキストといったデータは、それぞれに対して決まったデータタイプ(数字には数値データタイプ、テキストには文字列データタイプ)を扱うことで処理できるようになります。
LabVIEWにおけるデータタイプには、数値や文字列、ブール、波形、これらが集まった配列、あるいは複数の種類を組み合わせたクラスタが存在します。

そんな中、LabVIEW 2019から加わった新しいデータタイプが「コレクションデータタイプ」と呼ばれるもので、具体的には「セット」と「マップ」があります。

「セット」は他のプログラミング言語でも「セット」と呼ばれるのでイメージがつきやすい方も多いかもしれないですね。
また、「マップ」は他のプログラミング言語でいうところの「辞書型」がこれにあたります。
簡単に言うと、以下の特徴があります。
- セット・・・重複を許さず、また最初からソートされた順番でデータ要素が並んだ配列のようなデータタイプ
- マップ・・・重複しない「キー」とこれに対応した「値」をペアとしてこれらを複数まとめて扱うデータタイプ
以下、それぞれについてより具体的に紹介していきます。
セットについて
まずはセットについてです。
セットは後述するマップよりも単純で、一見ただの配列のように扱えるのですが、重複を許さず、また中身が常にソートされた状態になっているのが特徴です。
セットを作成するには、そのセットに含める要素を「セットを作成」へ配線するだけです。このとき、同じ値が複数配線された場合、生成されるセットには重複していても1つしか表示されません。そのため、入力した要素の数とセットの中の要素数が一致しないことが起こりえます。
例えば下の図の例では0と2が複数入力されていますが、出力されたセットには0も2も1個ずつしか含まれません。

セットに値を入れたり、セットから削除するのも専用の関数が用意されています。

また、セットの中の最大、最小を調べたり、ある値がセットに含まれているかどうかも確認することができます。

ただし、セットについてはセット専用の関数でしか扱えません。後々のデータ処理を行う上でこれだと使いづらい、という場合にはセットから配列にすることができます。

逆に、配列からセットにすることもできます。力技ですが、Forループとシフトレジスタを使用します。

また、複数のセットに対して、和集合や差集合、直積といった処理が簡単に行えます。
和集合だと、入力した二つのセットでどちらか一つにでも含まれていた要素があれば生成されるセットに入ります。
共通集合だと、二つのセットに共通した要素しか含まれないセットが生成されます。

直積だと、二つの入力セットの中身をペアにした組み合わせを得ることができます。
差集合では、最初(上側)に入力したセットにしかない要素のみのセットを生成することができ、対称差では二つの入力で重複した要素以外を抽出できます。

なお、上の例は全て数値データで紹介していましたが、別のデータタイプも扱うことができます。

マップについて
次はマップについてです。
マップは、ある「キー」とこれに対応した「値」をペアとして、このペアの情報を複数持ったデータタイプになっています。

マップに新たな「キー」と「値」のペアを追加することもできますし、「キー」を指定して削除することもできます。

なお、マップに登録される「キー」は重複が許されません。もし同じ「キー」で別の「値」を持つ要素が追加された場合には、「値」が上書きされます。

セットの時のように、マップ中のデータの最大最小を調べたり、ある「キー」が存在するかどうかを確認することもできます。

マップは「キー」と「値」のセット・・・ということでクラスタに変換させることができます。

クラスタからマップへ変換させる際には、セットのとき同様にForループとシフトレジスタを使用します。

少し特殊な使い方になりますが、「値」の部分にセットを使用することもできます。
これを行うのに登録という関数が用意されているのでこれを使用します。

セットの要素の中身に特定の値が入っているかを調べたり、登録を解除することもできます。

本記事では、コレクションデータタイプについて紹介しました。
LabVIEWをやる前に他の言語知っていたよという方にとってはなじみ深い内容かもしれません。既存のデータタイプである配列やクラスタで似たような操作はできなくはないと思いますが、より便利にこういったデータタイプが扱えるようになったことでアプリケーション構築の幅も広がると思います。実際に動作を試しながら慣れていく際の参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント