2014年9月9日火曜日

Maxscript その6 「配列 array値とコレクション」

スクリプトリファレンスの
「コレクション>コレクションのタイプ>配列の値」
もしくは「名前、リテラル定数、および式>リテラル定数>配列リテラル」

配列の概念は色んなサイトでとりあげられているので、詳しくはそちらを参照。「プログラム 配列」などで検索すると沢山出てくると思う。Pythonでは配列(array)はリスト(list)と呼ばれているようだ。

Maxscriptでの配列は#()で囲み「,」で区切る。
#()とすると空の配列

配列の要素へのアクセスは[]を付けて番号を入力
基数は0ではなく1なので、1番目の要素の番号は1。


float値を入力してもエラーにはならないがintegerに変換しているっぽい。親切設計。


<リファレンスより>
MaxScript で使用される基数は 1 なので、MaxScript 内で順に並べることのできるコレクションはすべてインデックス 1の位置から始まります


Maxscriptでは配列の基数は1から始まる。しかし、騙されてはならない。困ったことにMaxscriptは仕様が厳格に守られているとは言い難い。ルールに一貫性がない部分も多数存在している印象を受ける。コレクションではないが基数が0の時もある

例えばレンダーエレメント

レイヤーマネージャーも確か0だった気が。(0をデフォルトレイヤーとして使用)。
なので、自分の書いたコードがうまく動作しない際に、Maxscriptの仕様そのものを疑う必要もあったりなど。Maxscriptはこの世の不条理を教えてくれる。とても勉強になる。

一般的に配列の基数は0の事が多いように思う。Maxscriptでプログラムを覚え、他の言語を始める際、もしくは逆の場合もこの部分は注意したい。

計算
中に式も書ける



多次元配列

変数の初期化
未定義の変数をいきなり配列として使う事は出来ないようだ。
なので、一度変数に何かしらの配列を代入し初期化する必要があるようだ。

-----------------------------
配列の代表的なメソッド等
(戻り値とかあるので難しいと感じる人は慣れてきてからで全然問題ないと思う)

要素数の取得/設定
<array>.count

配列内の最小値、最大値の取得
amin <array>
amax <array>
おそらく、integer、float、time値用。
(point3は対応していないと思うので、他のコレクションのメソッドで)





配列に要素を追加
append <array> <value>

配列内に同じ要素がない場合、要素を追加
appendIfUnique <array> <value> 成功した場合はTrue/失敗した場合はFalse



配列の重複を消去
makeUniqueArray <array>

要素の消去
deletItem <array> <number>

配列の結合
join <array> <collection>

+としても多分同じ。また<collection>なので<array>も含む。配列同志の結合でも使える。

値の挿入
insertItem <value> <array> <integer>

<value>を<array>の<integer>に挿入

配列のソート
sort <array>

要素の検索 最初に現れるインデックスを返す。存在しない場合は0
findItem <array> <value>

ソートの条件を指定する
qsort <リファレンスを参照>


配列の複製について シャローコピー、ディープコピー

aとbは同じ配列を参照する。
結果bの値を変更するとaの値も変更する。

deepcopyとすると独立した配列となる
copyの#nomapオプションについてはよく分からなかった。
マッピングしないとは?それはディープコピーとは何が違うのか?

ここでは値メインの説明だったが配列には値の他にも、オブジェクトやらクラスやらユーザーインターフェースやら、様々なものを入れる事が出来る。

-------------------
tips:MAXの配列について

Maxscriptにおける配列はコレクションに分類されているようだ。配列のような物が多数存在しているらしい。3DCGソフトのスクリプトならではか。なので配列(array値)用の命令を他のコレクションに使うとエラーとなる場合がある。配列用の命令を使用したい場合はas を使って型をarrayに変換してから処理を行う必要があるらしい。もしくはリファレンスで各コレクションに準備されているメソッドを確認するなど。コレクションは値でもあり、収集する役割もあったり。この辺りの概念が少し分かりづらくもある。



代表的なコレクションについては過去記事のMAXScript ObjectSet値など

0 件のコメント:

コメントを投稿