From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

2D配列ソートを2重にかける

解決済み
解決策を見る

manakaと申します。

 

表題の件で悩んでおります。

配列には、1列目に文字、2列目に1ケタの数字、3列目には1ケタ以上の数字が入っています。

 

まず、配列の2列目をみて、該当する値のものだけを抜粋します。

(例えば3が入力されている指標の行だけを抜き出します)

→ここまでは、該当する値のみに絞るだけなので出来ました。

 

今度はその絞られた結果の3列目をみて、並べ替えます。

(つまり、2列目に3と入力されているものだけで再ソートします)

 

悩んでいる点は、

csvを「スプレッドシート文字列を配列に変換」で処理していき、ネットで見つけたソートができるVIで

ソートをかけたのですが、3列目の1ケタ以上の数字を文字としてみてしまっているからか

10000、152、13800をソートしても、10000、13800、152となってしまいます。

 

長くなりましたが、初歩的なことですみません。

文字と数値が混ざっている配列で上記のようなことをしたい場合どのようにしたらよいのでしょうか。

 

どなたか教えて頂けたら幸いです。

 

0 件の賞賛
メッセージ1/3
2,321件の閲覧回数
解決策
トピック作成者manakaが受理

文字列があるために、数値も含めて文字列で格納された文字列2D配列で、数値は数値でソートしたいということと思います。

1つの方法は、一旦、数値は数値にして、それでソートする方法です。ここで、LabVIEWのソート関数はとても強力で、クラスタをソートすると、クラスタ内の順序を優先順位にクラスタのままソートしてくれますので、元の配列を一旦、「3列目の数値、1列目の文字、2列目の文字(1桁の数字ですがここでは効かないので文字のままにする)」からなるクラスタの1D配列にしてソートしてしまいます。ソートしたら、For文でもう一度「1列目の文字、2列目の文字、3列目の数値(を文字列に戻す)」で2D配列化すれば、あたかも元の文字列2D配列を3列目でソートしたようになります。なお、3列目の数値の次が1列目の文字になっていますので、3列目の数値が同じものに関しては1列目の文字の順に並びます。

 

(これを使うと、2列目の1桁の数字も一緒にソートすることもできます。クラスタ化の優先順位を、「2列目を数値にしたもの、3列目を数値にしたもの、1列目の文字」の順にクラスタにして1Dソートすると、2列目が同じものが一旦まとまり、その中で3列目の数値でソートされ、という風な順になります)

0 件の賞賛
メッセージ2/3
2,316件の閲覧回数

M.Shiraishi様

 

早速のご返信ありがとうございます。

そして、悩みも一瞬で解決されました。いつも分かりやすい解説をありがとうございます。

頂いたサンプルで勉強させて頂きます。

 

なかなか応用力がなく、いつもつまずいてしまいます。大変助かりました。

0 件の賞賛
メッセージ3/3
2,284件の閲覧回数