Grasshopper :: データをSortする
今回は、リスト内のデータを昇順または降順でソートする方法です。
Grasshopperのコンポーネント2種類と、Pythonを使った場合で紹介していきます。
レシピ
Grasshopperのコンポーネントでソートを行う場合は、扱うデータのタイプによって使用するコンポーネントが変わります。
まず数値を扱う場合は、[Sort List]コンポーネントを使います。入力側の[Key]にソートしたいリストを繋ぐと、出力側の[Key]から昇順でソートされたリストが返されます。
ここで、別のリストを入力側の[Value A]に繋ぐと、そのリストを[Key]で行った並び変えと同じ順序に並び変えることができます。この時のリストのデータタイプは数値でなくてもOKです。
また、コンポーネントにズームすると、[+][-]が出てくるので、何個でもリストを追加することができます。
次に、文字列を含むリストをソートしたい時は[Sort Text]コンポーネントを使います。使い方は[Sort List]と同じになります。
ここで気をつけていただきたいのが、リスト内の数値も文字列になるため、図では“10”が”1″の次に来てしまっています。
また、アルファベットの順番も、小文字の”a”の次に大文字の”A”が来てしまい、大文字と小文字で分けたい場合は不便です。
そこでPythonを使ってこの問題を解消したいと思います。
Pythonの場合
コードは以下の通りです。
まずは、前回紹介した方法で数字と文字を分け、それぞれのリストをソートします。
使うのはsorted()
です。
すると、[a]からは、ちゃんと[…,A,B,C,a,b,c,…]の順番になっています。
続いて[b]では、sorted(num, key = str)
とすることで、str型でソートしています。従って[Sort Text]コンポーネントと同様に、”1″の次に”10″がきてしまっています。
そして[c]では、sorted(num, key = int)
とすることで、int型でソートしています。よって、正しい数字のソートが行われます。
いかがでしたでしょうか。データのタイプによって使い分けてみてくださいね。
使用した主なコンポーネント
- [Sort List] (Sets > List > Sort List)
- [Sort Text] (Sets > Text > Sort Text)
- [Python Script] (Maths > Script > Python Script)