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)

コメントを残す