生物と計算機のあいだ

個人的にうまくいったかなとおもったことを書いています。うまくいかなかったらごめんなさい。

MATLAB: セル配列から文字列を検索してインデックスを返す

セル配列にある文字列のインデックスと配列の構造体の任意の次元の値が対応しており、文字列の情報を引数にデータを引っ張り出してきたいという場面に出くわしました。
(しっかり設計していれば、インデックスで対応させるんじゃなくて、構造体にまとめるなりなんなり出来るはずですが。)

MATLABの文字列検索三兄弟(strncmp, strmatch, validatestring)のstrmatchを使ったら期待通りの結果が得られました。

>> city = {'tokyo', 'kyoto', 'osaka', 'okinawa'}

city = 
    'tokyo'    'kyoto'    'osaka'    'okinawa'

>> index = strmatch('kyoto', city)

index =
     2

% 第三引数に'exact'をつけると完全一致を探してくれるみたいです。

ただ、公式のドキュメントにこのstrmatchの使用は推奨されないとの表記が。。
strncmpだと全てのセル配列との比較結果が論理値が返ってくるから、インデックス番号を知りたければfindを使うみたいです。
ということでこちらがナウい書き方

>> index = find(strncmp('kyoto', city, 5))

index =
     2

ずぼらなので、第三引数に数字を渡さなきゃいけないのがとんでもなくめんどくさいと思ってしまいます。

追記:昔のフォルダを漁っていたら、同じことをするためにstrcmp, for, ifを駆使してインデックスを見つけてくるという闇魔術関数を作成していた...