Cocoaの機能(NSMutableArray)を使って配列(AppleScriptではリスト)を連結するAppleScriptです。
普通にAppleScriptの配列型であるList型変数で配列同士の連結を行う場合には、
set aList to {1, 2, 3} set bList to {4, 5, 6} set cList to aList & bList --> {1, 2, 3, 4, 5, 6}
とします。
AppleScript自体に配列であるList型のデータを操作する機能がありますが、いわゆるメソッドと呼ばれるものがほとんどなく、AppleScript単体ではソートやデータ抽出などの機能もありません(ループでチェックしてソートしたり抽出することは可能。ユーザー同士で積み重ねてきた機能ルーチンの蓄積はけっこうあります)。
あるいは、外部のアプリケーション(FileMaker Pro)を利用したり、macOS標準搭載のDatabaseEventsなどを併用することでデータ抽出を行なってきたという歴史があります。
だいたいは、データ抽出のためにリストを全件ループでチェックして、条件に合うものを抽出するとか、そういう脳筋プログラミングをしてきました。アプリケーションのコントロールという超ハイレベルな操作を行う一方で、泥くさい地道なデータ処理能力が低かったので、おっそろしく地道なプログラムを作れる能力も求められてきた環境ともいえます。
macOS 10.10以降ではCocoaの機能が通常のAppleScriptでも利用できるようになったため、NSArray/NSMutableArrayの機能を用いてそれらのクラス由来のさまざまな機能が利用できるようになり、リストの連結についても、いったんNSMutableArrayに変換して各種機能を呼び出すことが行われるようになってきました。
ただし、リスト型変数をNSMutableArrayに変換するのにも時間はかかるため、巨大なデータ(数千〜1万項目以上)を扱うケースでなければAppleScriptだけで脳筋処理したほうが高速というケースはままあります。
本Scriptの末尾で連結したリストではなく、そのlengthを取得しているのは、連結したデータ項目数が多すぎて、そのままスクリプトエディタの「結果」欄に出力すると受信時間がかかりハングアップ状態に見えてしまうためです。
AppleScript名:リストの連結(addObjectsFromArray) |
— Created 2017-10-12 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" property NSMutableArray : a reference to current application’s NSMutableArray set anArray to NSMutableArray’s new() repeat 10000 times anArray’s addObjectsFromArray:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} end repeat return length of (anArray as list) –> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1…..} |