いまさらLabVIEW2019で新登場の辞書型「Map」を使ってみる

Introduction

先日LabVIEW 2020のComminity Editionが正式発表されてその界隈では話題になっているが、これをもって自分も最新版であるLabVIEW 2020を正式に使えるようになった。今までは研究室で持っていたアカデミックサイトライセンス(2018)と個人で学生として持っていたStudent Editionの2017しか使えていなかったので、バージョン2019以降に導入された新機能は使えずにいた。(当然卒業したので4月以降2018も使えなくなり…)

LabVIEWのバージョンアップは、新しいバージョンで一度でも保存したVIが過去のバージョンで開けなくなるという悪名高い仕様[1]となっており、かつ時に(人によっては)超絶微妙なアップデートしかないこともあり[2]個人的にはあんまり積極的にアップデートする必要性も感じていないのだが、2019で追加されたMapはかなり使い勝手がよさそうなので、今更ながら試してみた。

[1] https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z0000004AqUSAU&l=ja-JP

[2] 例えば個人的には2016 http://zone.ni.com/reference/ja-XX/help/371361N-0112/lvupgrade/labview_features/

MapはDictionary型と呼ばれることもあるデータ構造で、配列のインデックスとして文字列なども使えるという代物。例えばPythonで以下の様な辞書形式のデータはpriceという配列に文字列”apple”や”strawberry”でアクセスできるのでかなり便利になる。

price["apple"]=100
price["strawberry"]=200

Map型

でもってLabVIEWには2018以前はこの辞書型がなかった、のだが2019になってついに実装された。Programming→Collection→Mapに関係あるVIがまとまっている。基本的には見たとおりなのだが順に見ていくと

  • Build Map: Build Arrayに対応する。キーと値のペアを渡してMapを初期化する。Build Arrayみたいに縦に拡張することも可能
  • Insert Into Map: Insert Into Arrayに(以下略)。同じキーだと上書きされるっぽい
  • Remove From Map: Delete From Array(略)。
  • Look In Map: Array Indexみたいなものだが、キーが見つかるとも限らないのでそれに関係した入出力端子がある
  • Read Max & Min Keys: 読んだとおりだが使い道が分からん
  • Collection Size: Array Sizeみたいなやつ
  • Empty Collection?: Collection Size==0?ってことかと思う
  • Control/Indicator: Front Panelから編集できないっぽい?

で、ここからがいまいちHelpにも書いてあるんだか、なんなんだか分からないのだが極めて重要(だと思っている)Mapの全要素に対する操作(for)だが、以下のように行けることが分かった

  • ForにIndexing terminalで繋ぐと各要素のクラスタとして取り出せる。クラスタの一番目の要素はキーで、二番目が値となっている。
  • ということはキーの一覧が欲しい場合は、ForループにIndexing terminalでつなぎ、クラスタをunbundleしてKeyだけをIndexingで出力すれば良い(下図右側のFor構造)

感想

自分で辞書型的なものはライブラリを持っていたが、Look Up In Mapを見るとやっぱりNIの人が作ってもそういう入出力端子になるか、というのが見えた。まあ誰が作ってもそうなるか。自作のライブラリは線形探索でO(N)かかるはずなので大分こっちの方が早いのでないかと予想しているが、LabVIEWで今まで自分が辞書型を使っていたのはたかだかN=50くらいなので、メリットがあるかは分からない

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です