測定代行株式会社

お問い合わせ

測定代行株式会社

LabVIEWでのセット(set)コレクションの使い方と実践応用ノウハウ

LabVIEWモダンプログラミング解説

LabVIEW「セット(Set)」コレクションの使い方と応用例
重複を自動排除する一意なデータ管理と高速集合演算の実装

配列での面倒な条件チェックを過去のものに。ユニークデータの抽出・比較に抜群の威力を発揮

LabVIEWで「新しく発生したエラーコードの一覧」や「現在通信中のデバイス名リスト」を作る際、配列にデータを追加する前に「1D配列検索」関数を使って「すでに同じデータが含まれていないか」を毎回チェックしていませんか?
要素数が増えるほどチェック処理に時間がかかる配列処理の弱点を根本から解消し、**「重複のない一意(ユニーク)なデータ集合」**を自動で維持・管理するために用意されたのが、コレクション機能の**「セット(Set)」**です。

セット

◆ セット(Set)とは?

数学の「集合」の概念をプログラム内で扱うための機能です。最大の特徴は、**「同じ値(要素)を絶対に重複して保持しない」**という点にあります。要素をどれだけ無造作に放り込んでも、内部で自動的に重複が弾かれ、常にユニークな要素だけが残ります。また、要素は内部で自動的にソート(並び替え)されて保持されます。

◆ 配列に対する3大メリット

1. 重複チェックロジックが不要:「セットに挿入」するだけで、重複排除が1個の関数で完了します。
2. 集合演算が一瞬で可能:2つのデータ群の「共通要素(積集合)」や「足し合わせ(和集合)」をループなしで計算できます。
3. 存在確認が超高速:配列のように端から順に検索(ポーリング)しないため、数万件のデータがあっても一瞬で有無を判定できます。

セット(Set)コレクションの基本的な使い方

関数パレットの「プログラミング > コレクション」にあるセット専用の関数を使用します。

1. セットの初期化(空のセットを作成)

「コレクション > 空のセット」定数をブロックダイアグラムに配置します。定数の上で右クリックし、「要素の型」を設定します(例:文字列、数値、エラークラスタなど)。

2. 要素の追加(セットに挿入)

「セットに挿入(Insert Into Set)」関数を使用します。すでに同じ要素が存在していれば何も起こらず、存在していなければ新しい要素として追加されます。配列のように事前に「検索 + 条件分岐」という冗長なコードを書く必要はありません。

3. 要素の存在確認(セット内を検索)

特定のデータが含まれているかを調べるには、「セット内を検索(Look Up In Set)」関数を使用します。データが存在すれば「見つかった(Found)」端子がTrueで出力されます。

4. 配列への相互変換

セットのままではForループでのインデックス参照やグラフ描画ができないため、最終的に処理する際は「セットから配列へ(Set To Array)」関数を使って、すっきりソートされた重複のないクリーンな配列に変換して使用します。逆に、既存の配列を「配列からセットへ(Array To Set)」に流し込むだけで、一発で重複排除が完了します。

実務で役立つ!セットコレクションの実践応用例(4選)

測定代行株式会社が工場ラインの監視やマルチスレッドログ解析などで採用している、実戦的な実装パターンです。

応用例 1 計測中の「発生済みエラーコード」の重複なき動的リスト化

24時間連続稼働する試験装置において、発生したエラー(または警告コード)をリアルタイムでテキストログや画面に一覧表示させたい場合。

【実務での活用】
通信エラーなどが1秒間に何百回と連続発生した際、配列だと同じエラーコードが何千個も並んでしまい、画面が埋め尽くされます。発生したエラーコードを「セットに挿入」していけば、現在「どんな種類のエラーが起きているか」のユニークリストが最小負荷で綺麗に維持できます。
応用例 2 動的に変化する「現在オンライン(通信確立中)の全デバイス」の管理

複数の子機センサー(無線やシリアル通信)が不定期にデータを送ってくる環境で、現在応答があったアクティブな子機ID(名前)の一覧をリアルタイムに把握したい場合。

【実務での活用】
データを受信するたびに、送信元の子機IDをセットに放り込みます。一定時間応答がないものは「セットから削除」します。これにより、「現在確実に生きているユニークなデバイスリスト」を動的に美しく管理できます。
応用例 3 「和集合(Union)」関数による複数箇所のログデータの非重複結合

2つの異なる測定拠点や、異なる並列ループから収集された「測定完了したワークのシリアル番号(文字列配列)」のリストをガッチャンコして1つにまとめたい場合。

【実務での活用】
双方の配列を一度セットに変換し、「和集合(Union)」関数にワイヤリングします。これだけで、両方に含まれる全要素をカバーしつつ、重複を完璧に排除した1つのマスターリストが瞬時に生成されます。
応用例 4 「積集合(Intersection)」関数による、全試験をクリアした「合格品」の高速抽出

「外観検査をパスした製品のシリアル番号セット」と「電気特性検査をパスした製品のシリアル番号セット」の双方を満たす製品だけを抽出したい場合。

【実務での活用】
2つのセットを「積集合(Intersection)」関数に接続するだけです。両方のセットに共通して存在する要素(=完全合格品)のリストが、複雑なForループや条件判定なしで一瞬で導き出されます。

セット(Set)を使う際の注意点とプロのアドバイス

◆ 注意:「要素の順序」が挿入順にならない点に留意
セットは内部構造上、データを「追加した順番(時系列)」ではなく、値の大きさや文字列の辞書順に**自動的にソートされて保持**されます。
そのため、「データが到着した順番をそのまま維持したい(時系列のログなど)」という要件にセットを直接使うのは不向きです。

【プロの選択】
時系列順の維持が絶対である場合は、従来通り「配列」を使用し、配列に要素を追加する前の重複防止・検索ステージとして「マップ」や「セット」をインデックスのインフラとして裏で併用する、といったハイブリッドな設計を行うことで、速度と時系列維持の両立を達成します。

無駄がなく堅牢なLabVIEWプログラミングは「測定代行株式会社」へ

「配列の重複チェック処理が重すぎてループ速度が上がらない」「セットやマップなどのモダンなコレクション機能を組み込んだ効率的なソフトウェアアーキテクチャに刷新したい」「古いLabVIEWコードのスパゲッティ状態を解消(リファクタリング)してほしい」といった課題は、すべて測定代行株式会社にお任せください。

弊社は、元・横河電機のR&D部門で最先端の光通信計測機器開発を行っていた技術者が代表を務める、LabVIEW受託開発のスペシャリスト集団です。単に動くだけのコードではなく、メモリ効率や計算負荷を極限まで考慮した、24時間365日安定して動作する「美しいプログラム(VI作成)」をご提供いたします。

◆ ソースコード(VI)はブラックボックス化せず完全譲渡
測定代行株式会社が納品するLabVIEWプログラムは、すべてソースコード(VIファイル)を開示し、完全譲渡いたします。開発会社による囲い込みリスクが一切ないため、納品後は大学の研究者様や企業のエンジニア様ご自身の手で、自由に仕様変更や内製化・カスタマイズを行っていただけます。

LabVIEW開発・効率的アーキテクチャ構築のご相談(相談・見積無料)

明確な仕様書やドキュメントがない研究初期フェーズからの具現化、他社製プログラムの不具合解析、最新Windows11への移行など、どんなお悩みでもお気軽にご相談ください。実務経験豊富なエンジニアが直接解決策をご提案します。

お電話での受付:平日 9:00~18:00

048-291-8807

LabVIEW開発・データ設計について無料相談する