2D List(2次元配列)からの条件抽出です。
Predicates文で対象を指定できるので、表記は手軽だし簡潔に記述できるのですが、実行速度がいまひとつです。
AppleScriptの処理系はGUIアプリケーションとのプロセス間通信を行わないかぎりは、処理系が(いまとなっては)コンパクトなため相当に高速に処理してくれるので(大規模データの扱いに難はありますが)、AppleScriptの単純ループ処理で抽出したほうがCocoa呼び出しよりも高速というケースが多々あります。
数万件規模のデータになるとCocoaの機能を用いるべきですが、ごくごく小規模なデータを扱う(1万件以下)場合であれば、AppleScriptの単純ループ処理のほうが高速です。
Cocoaの呼び出し処理は初回に時間がかかって、繰り返し呼び出すことでキャッシュされてスピードが向上する傾向がありますが、このような小規模なデータが対象だとPlaneなAppleScriptの処理のほうが5倍以上高速という結果が出ます。
画像の空白検出のような大規模データの処理だとCocoaの機能を呼び出したほうが高速なので、そのあたりは使い分け・見極めがきわめて重要といえます。
AppleScript名:2D List中の特定アイテムが指定リストに入っていたら抽出 |
— Created 2017-11-03 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" property NSPredicate : a reference to current application’s NSPredicate property NSArray : a reference to current application’s NSArray set aList to {{"Apple", 2}, {"Lemon", 3}, {"Apple", 4}, {"Water Melon", 2}} set aTarg to {"Apple", "Lemon"} –データの表記ゆらぎ対策に使える? set anArray to NSArray’s arrayWithArray:aList set aPred to NSPredicate’s predicateWithFormat_("SELF[0] IN %@", aTarg) set bRes to (anArray’s filteredArrayUsingPredicate:aPred) as list –> {{"Apple", 2}, {"Lemon", 3}, {"Apple", 4}} |
More from my site
(Visited 27 times, 1 visits today)