AppleScript名:配列の最後の要素を削除する |
— Created 2017-02-24 11:38:39 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –最後の要素を削除する set fMuta to current application’s NSMutableArray’s arrayWithObjects_(1, 2, 3) fMuta’s removeLastObject() fMuta –> (NSArray) {1, 2} |
カテゴリー: list
配列の最初の要素を削除する
AppleScript名:配列の最初の要素を削除する |
— Created 2017-02-24 11:38:58 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –最初の要素を削除する set gMuta to current application’s NSMutableArray’s arrayWithObjects_(1, 2, 3) gMuta’s removeFirstObject() gMuta –> (NSArray) {2, 3} |
配列の指定要素を削除する
AppleScript名:配列の指定要素を削除する |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –Chapter 6 Lib.asobjcex3doc set theList to {5, 2, 9, 4, 2, 6, 3} set bList to my deleteItem:2 fromList:theList –> {5, 9, 4, 6, 3} set cList to deleteItem of me by 2 from theList –> {5, 9, 4, 6, 3} set dList to deleteItemBy(2, theList) of me –> {5, 9, 4, 6, 3} –Objective-Cライクなパラメータ記述 on deleteItem:anItem fromList:theList set theArray to current application’s NSMutableArray’s arrayWithArray:theList theArray’s removeObject:anItem return theArray as list end deleteItem:fromList: –無意味句による装飾 on deleteItem by anItem from theList set aRes to my deleteItem:anItem fromList:theList return aRes end deleteItem –Pure AS風のパラメータ記述 on deleteItemBy(anItem, theList) set aRes to my deleteItem:anItem fromList:theList return aRes end deleteItemBy |
配列から要素を削除する(要素をインデックスで指定)v2
AppleScript名:配列から要素を削除する(要素をインデックスで指定)v2 |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –Chapter 6 Lib.asobjcex3doc set theList to {1, 2, 3, 4, 5, 6, 7, 8, 9} set bList to my deleteItemsAtIndexes:{3, 5, 7, 1} fromList:theList –> {2, 4, 6, 8, 9} set bList2 to deleteItems of me by {3, 5, 7, 1} from theList –> {2, 4, 6, 8, 9} set bList3 to deleteItemsBy({3, 5, 7, 1}, theList) of me –> {2, 4, 6, 8, 9} –Objective-Cライクなパラメータ記述 on deleteItemsAtIndexes:theIndexes fromList:theList set theArray to current application’s NSMutableArray’s arrayWithArray:theList set theSet to current application’s NSMutableIndexSet’s indexSet() repeat with anIndex in theIndexes (theSet’s addIndex:(anIndex – 1)) end repeat theArray’s removeObjectsAtIndexes:theSet return theArray as list end deleteItemsAtIndexes:fromList: –無意味区による装飾 on deleteItems by theIndexes from theList set aList to my deleteItemsAtIndexes:theIndexes fromList:theList return aList end deleteItems –Pure AS風のパラメータ記述 on deleteItemsBy(theIndexes, theList) set aList to my deleteItemsAtIndexes:theIndexes fromList:theList return aList end deleteItemsBy |
配列の複数の要素を取得する
配列(AppleScriptではlist(リスト)と呼ぶ)のうち、複数の要素を取得するAppleScriptです。
AppleScriptでは、配列の要素番号は1からはじまります。0番目の要素というのはありません。
set aList to {1, 2, 3, 4, 5}
set bList to items 1 thru 3 of aList
–> {1, 2, 3}
★Click Here to Open This Script
対して、CocoaのNSArray / NSMutableArrayでは、配列の要素番号は0からはじまります。AppleScriptからCocoaのNSArrayを用いる場合には、要素番号の指定基準が異なることに注意が必要です。
AppleScript名:配列の複数の要素を取得する |
— Created 2015-09-02 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set anArray to current application’s NSArray’s arrayWithObjects_(1, 2, 3) –> (NSArray) {1, 2, 3} –複数の要素を取得する set anInd to current application’s NSIndexSet’s indexSetWithIndexesInRange:(current application’s NSMakeRange(1, 2)) –> (NSIndexSet) <NSIndexSet: 0x600000431140>[number of indexes: 2 (in 1 ranges), indexes: (1-2)] set aRes to anArray’s objectsAtIndexes:anInd –> (NSArray) {2, 3} |
配列の要素を順番に取得する
AppleScript名:配列の要素を順番に取得する |
— Created 2015-09-02 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set anArray to current application’s NSArray’s arrayWithObjects_(1, 2, 3) –> (NSArray) {1, 2, 3} –要素を順番に取得する set anEnum to anArray’s objectEnumerator() –> (__NSFastEnumerationEnumerator) <__NSFastEnumerationEnumerator: 0x6000002c1180> repeat set aValue to anEnum’s nextObject() if aValue = missing value then exit repeat log aValue end repeat |
配列の要素を逆順に取得する
Cocoaの機能を用いて1次元配列の内容を逆順にするAppleScriptです。
配列の内容を逆順にするのは、基本的なAppleScriptの機能でも「reverse of」で求められるので、わざわざCocoaの機能を利用するというのは相当に配列の要素数が多い(1万アイテム以上)場合に限られます(要素数が少ない場合だと、処理速度が遅くなるため)。
AppleScript名:配列の要素を逆順に取得する |
— Created 2015-09-02 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set anArray to current application’s NSArray’s arrayWithObjects_(1, 2, 3) –> (NSArray) {1, 2, 3} –要素を逆順に取得する set revEnum to anArray’s reverseObjectEnumerator() –> (__NSArrayReverseEnumerator) <__NSArrayReverseEnumerator: 0x610000a3c600> repeat set aValue to revEnum’s nextObject() if aValue = missing value then exit repeat log aValue end repeat |
数値リストで指定数よりも大きな要素のみを抽出
AppleScript名:数値リストで指定数よりも大きな要素のみを抽出 |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aList to {8, 2, 7, 3, 9, 1, 6, 4} set theArray to current application’s NSArray’s arrayWithArray:aList set thePred to current application’s NSPredicate’s predicateWithFormat:"self >= 4" set bList to (theArray’s filteredArrayUsingPredicate:thePred) as list –> {8, 7, 9, 6, 4} set thePred to current application’s NSPredicate’s predicateWithFormat:"self > 4" set cList to (theArray’s filteredArrayUsingPredicate:thePred) as list –> {8, 7, 9, 6} |
指定数ではない要素のみを抽出
AppleScript名:指定数ではない要素のみを抽出 |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set theArray to current application’s NSArray’s arrayWithArray:{8, 2, 7, 3, 9, 1, 6, 4} set thePred to current application’s NSPredicate’s predicateWithFormat:"(self != 2) AND (self != 4)" set bList to (theArray’s filteredArrayUsingPredicate:thePred) as list –> {8, 7, 3, 9, 1, 6} |
指定文字列ではじまる要素のみ抽出
AppleScript名:指定文字列ではじまる要素のみ抽出 |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set stringArray to current application’s NSArray’s arrayWithArray:{"adobe", "Apple", "microsoft", "google"} set thePred to current application’s NSPredicate’s predicateWithFormat:"self BEGINSWITH ’a’" set bList to (stringArray’s filteredArrayUsingPredicate:thePred) as list –> {"adobe"} |
指定文字列ではじまる要素のみ抽出(大文字、小文字を問わず)
AppleScript名:指定文字列ではじまる要素のみ抽出(大文字、小文字を問わず) |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set stringArray to current application’s NSArray’s arrayWithArray:{"adobe", "Apple", "microsoft", "google"} set thePred to current application’s NSPredicate’s predicateWithFormat:"self BEGINSWITH[cd] ’A’" set bList to (stringArray’s filteredArrayUsingPredicate:thePred) as list –> {"adobe", "Apple"} |
指定文字列ではじまる要素のみ抽出(ワイルドカード使用)
AppleScript名:指定文字列ではじまる要素のみ抽出(ワイルドカード使用) |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set stringArray to current application’s NSArray’s arrayWithArray:{"adobe", "Apple", "microsoft", "google"} set thePred to current application’s NSPredicate’s predicateWithFormat:"self LIKE ’Ap*’" set bList to (stringArray’s filteredArrayUsingPredicate:thePred) as list –> {"Apple"} |
指定リストから、Regexpで要素を抽出
AppleScript名:指定リストから、Regexpで要素を抽出 |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set stringArray to current application’s NSArray’s arrayWithArray:{"adobe", "22", "microsoft", "99"} set thePred to current application’s NSPredicate’s predicateWithFormat:"self MATCHES ’\\\\d\\\\d’" set bList to (stringArray’s filteredArrayUsingPredicate:thePred) as list –> {"22", "99"} |
指定リストから、文字数で要素を抽出
AppleScript名:指定リストから、文字数で要素を抽出 |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set stringArray to current application’s NSArray’s arrayWithArray:{"adobe", "22", "microsoft", "99"} set thePred to current application’s NSPredicate’s predicateWithFormat:"self.length > 5" set bList to (stringArray’s filteredArrayUsingPredicate:thePred) as list –> {"microsoft"} |
配列の要素を挿入する
AppleScript名:配列の要素を挿入する |
— Created 2015-09-02 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set anArray to current application’s NSArray’s arrayWithObjects_(1, 2, 3) –> (NSArray) {1, 2, 3} –要素を挿入する bArray’s insertObject:10 atIndex:1 bArray –> (NSArray) {1, 10, 2, 3, 100} |
配列の指定アイテムに指定要素を挿入
AppleScript名:配列の指定アイテムに指定要素を挿入 |
— Created 2017-10-29 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –Chapter 6 Lib.asobjcex3doc set theList to {5, 2, 9, 4, 2, 6, 3} set longList to my insertItem:99 atIndex:5 inList:theList –> {5, 2, 9, 4, 99, 2, 6, 3} set longList2 to insertItem of me at 99 for 5 from theList –> {5, 2, 9, 4, 99, 2, 6, 3} set longList3 to insetItemBy(99, 5, theList) of me –> {5, 2, 9, 4, 99, 2, 6, 3} –Objective-Cライクなパラメータ記述 on insertItem:anItem atIndex:(theIndex as integer) inList:(theList as list) set theArray to current application’s NSMutableArray’s arrayWithArray:theList theArray’s insertObject:anItem atIndex:(theIndex – 1) return theArray as list end insertItem:atIndex:inList: –無意味区による装飾 on insertItem at anItem for theIndex as integer from theList as list set aRes to my insertItem:anItem atIndex:theIndex inList:theList return aRes end insertItem –Pure AS風のパラメータ記述 on insetItemBy(anItem, theIndex, theList) set aRes to my insertItem:anItem atIndex:theIndex inList:theList return aRes end insetItemBy |
配列を逆順に(ASOC)
Cocoaの配列(NSArray)を逆順に並びかえるAppleScriptです。
普通のAppleScriptのlist型変数であれば、reverse ofで逆順に並び替えられますが、Cocoaの配列だとこんな感じです。
AppleScript名:配列を逆順に(ASOC) |
— Created 2017-07-30 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aList to {1, 2, 3, 4, 5, 6} set anArray to current application’s NSMutableArray’s arrayWithArray:aList set revArray to (anArray’s reverseObjectEnumerator()’s allObjects()) as list –> {6, 5, 4, 3, 2, 1} |
1D Listの一部を取り出す
AppleScript名:1D Listの一部を取り出す |
— Created 2016-11-08 by Takaaki Naganoya — 2016 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set anArray to current application’s NSMutableArray’s arrayWithArray:{"1", "2", "3", "4", "5"} set anIndex to current application’s NSIndexSet’s indexSetWithIndexesInRange:(current application’s NSMakeRange(1, 3)) set cList to (anArray’s objectsAtIndexes:anIndex) as list –> {"2", "3", "4"} |
JTHistogramでArrayのヒストグラムを計算
AppleScript名:JTHistogramでArrayのヒストグラムを計算 |
— Created 2017-08-01 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "JTHistogramKit" –https://github.com/Kinokoo/JTHistogram –http://piyocast.com/as/archives/4757 set anArray to current application’s NSMutableArray’s arrayWithArray:{1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3} set histObj to current application’s JTHistogram’s alloc()’s initWithArray:anArray set histDict to histObj’s |histogram|() –> (NSDictionary) {0:0, 3:4, 2:2, 1:6} set relativeHistogramDict to histObj’s relativeHistogram() –> (NSDictionary) {0:0, 3:66.66667, 2:33.33334, 1:100} |
NSCountedSetでヒストグラムを計算2
AppleScript名:NSCountedSetでヒストグラムを計算2 |
— Created 2017-08-01 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "ArrayRandomize" –https://github.com/masakihirokawa/objc-classes-dc-randomize set theList to (current application’s DCRandomize’s shuffle:1 max:9999) set theTime to current application’s NSDate’s |date|() set theCountedSet to current application’s NSCountedSet’s alloc()’s initWithArray:theList set newArray to current application’s NSMutableArray’s new() repeat with i from 1 to 10000 (newArray’s addObject:{theKey:i, theCount:(theCountedSet’s countForObject:i)}) end repeat theTime’s timeIntervalSinceNow() return newArray as list of string or string |