| AppleScript名:積集合(product)v2 |
| — Created 2017-02-24 by Takaaki Naganoya — Created 2017-03-01 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" –http://piyocast.com/as/archives/4491 set aSet to current application’s NSMutableSet’s setWithArray:{1, 2, 3, 4} set bSet to current application’s NSMutableSet’s setWithArray:{3, 5, 6, 7} aSet’s intersectSet:bSet –積集合 aSet’s allObjects() as list –> {3} |
文字を集合(CountedSet)に変換して文字列同士の近似度を計算する(単語単位で評価) v4
| AppleScript名:文字を集合(CountedSet)に変換して文字列同士の近似度を計算する(単語単位で評価) v4 |
| — Created 2017-03-18 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "This is a pinnapple." set bStr to "This is an apple." set cStr to "Piyomaru San Dayo." set aRes to stringDifferenceWithAppearance(aStr, bStr, "A & B") of me –> {intersect:2, minus:2, dataLabel:"A & B"} set bRes to stringDifferenceWithAppearance(bStr, cStr, "B & C") of me –> {intersect:0, minus:4, dataLabel:"B & C"} set cRes to stringDifferenceWithAppearance(cStr, aStr, "C & A") of me –> {intersect:0, minus:3, dataLabel:"C & A"} –結果をソートする set allRes to current application’s NSArray’s arrayWithArray:{aRes, bRes, cRes} set aSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"intersect" ascending:false set bSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"minus" ascending:true set aSortedArray to allRes’s sortedArrayUsingDescriptors:{aSortDesc, bSortDesc} –もっとも似ている傾向を持つデータの組み合わせ set aMostApproximative to aSortedArray’s firstObject() as record –> {minus:2, dataLabel:"A & B", intersect:2} –文字列同士の近似傾向を、相違点と重複箇所の2つの方向から計算する on stringDifferenceWithAppearance(aStr, bStr, aLabel) set aMinus to getApproximationBetweenStrings(aStr, bStr) of me set aIntersect to getApproximationBetweenStringsIntersect(aStr, bStr) of me return {intersect:aIntersect, minus:aMinus, dataLabel:aLabel} end stringDifferenceWithAppearance –与えられた文字列同士の相違点を計算する(結果がより小さい値のデータ同士が似ている) on getApproximationBetweenStrings(aStr, bStr) set aList to current application’s NSMutableArray’s arrayWithArray:(words of aStr) set bList to current application’s NSMutableArray’s arrayWithArray:(words of bStr) set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList aIndex’s minusSet:bIndex set aRes to aIndex’s allObjects()’s |count|() bIndex’s minusSet:aIndex set bRes to bIndex’s allObjects()’s |count|() if aRes ≥ bRes then return bRes else return aRes end if end getApproximationBetweenStrings –与えられた文字列同士の重複箇所を計算する(結果がより大きい値のデータ同士が似ている) on getApproximationBetweenStringsIntersect(aStr, bStr) set aList to current application’s NSMutableArray’s arrayWithArray:(words of aStr) set bList to current application’s NSMutableArray’s arrayWithArray:(words of bStr) set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList aIndex’s intersectSet:bIndex set aRes to aIndex’s allObjects()’s |count|() return aRes end getApproximationBetweenStringsIntersect |
文字を集合(CountedSet)に変換して文字列同士の近似度を計算する v3
| AppleScript名:文字を集合(CountedSet)に変換して文字列同士の近似度を計算する v3 |
| — Created 2017-03-18 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" set aStr to "This is a pinnapple." set bStr to "This is an apple." set cStr to "Piyomaru San Dayo." set aRes to stringDifferenceWithAppearance(aStr, bStr, "A & B") of me –> {intersect:11, minus:3} set bRes to stringDifferenceWithAppearance(bStr, cStr, "B & C") of me –> {intersect:5, minus:8} set cRes to stringDifferenceWithAppearance(cStr, aStr, "C & A") of me –> {intersect:5, minus:9} –結果をソートする set allRes to current application’s NSArray’s arrayWithArray:{aRes, bRes, cRes} set aSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"intersect" ascending:false set bSortDesc to current application’s NSSortDescriptor’s alloc()’s initWithKey:"minus" ascending:true set aSortedArray to allRes’s sortedArrayUsingDescriptors:{aSortDesc, bSortDesc} –もっとも似ている傾向を持つデータの組み合わせ set aMostApproximative to aSortedArray’s firstObject() as record –> {minus:3, dataLabel:"A & B", intersect:11} –文字列同士の近似傾向を、相違点と重複箇所の2つの方向から計算する on stringDifferenceWithAppearance(aStr, bStr, aLabel) set aMinus to getApproximationBetweenStrings(aStr, bStr) of me set aIntersect to getApproximationBetweenStringsIntersect(aStr, bStr) of me return {intersect:aIntersect, minus:aMinus, dataLabel:aLabel} end stringDifferenceWithAppearance –与えられた文字列同士の相違点を計算する(結果がより小さい値のデータ同士が似ている) on getApproximationBetweenStrings(aStr, bStr) set aList to current application’s NSMutableArray’s arrayWithArray:(characters of aStr) set bList to current application’s NSMutableArray’s arrayWithArray:(characters of bStr) set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList aIndex’s minusSet:bIndex set aRes to aIndex’s allObjects()’s |count|() bIndex’s minusSet:aIndex set bRes to bIndex’s allObjects()’s |count|() if aRes ≥ bRes then return bRes else return aRes end if end getApproximationBetweenStrings –与えられた文字列同士の重複箇所を計算する(結果がより大きい値のデータ同士が似ている) on getApproximationBetweenStringsIntersect(aStr, bStr) set aList to current application’s NSMutableArray’s arrayWithArray:(characters of aStr) set bList to current application’s NSMutableArray’s arrayWithArray:(characters of bStr) set aIndex to current application’s NSCountedSet’s alloc()’s initWithArray:aList set bIndex to current application’s NSCountedSet’s alloc()’s initWithArray:bList aIndex’s intersectSet:bIndex set aRes to aIndex’s allObjects()’s |count|() return aRes end getApproximationBetweenStringsIntersect |
配列から要素を削除する(要素をインデックスで指定)
| AppleScript名:配列から要素を削除する(要素をインデックスで指定) |
| — Created 2017-02-24 11:37:14 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –要素を削除する(要素をインデックスで指定) set cMuta to current application’s NSMutableArray’s arrayWithObjects_(1, 2, 3) cMuta’s removeObjectAtIndex:2 cMuta –> (NSArray) {1, 2} |
配列の要素を削除する(範囲を指定)
| AppleScript名:配列の要素を削除する(範囲を指定) |
| — Created 2017-02-24 11:37:55 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –要素を削除する(範囲を指定) set dMuta to current application’s NSMutableArray’s arrayWithObjects_(1, 2, 3) dMuta’s removeObjectsInRange:(current application’s NSMakeRange(0, 1)) dMuta –> (NSArray) {2, 3} |
配列の要素をすべて削除する
| AppleScript名:配列の要素をすべて削除する |
| — Created 2017-02-24 11:38:17 +0900 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" –要素をすべて削除する set eMuta to current application’s NSMutableArray’s arrayWithObjects_(1, 2, 3) eMuta’s removeAllObjects() eMuta –> (NSArray) {} |
配列の最後の要素を削除する
| 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} |
配列の最初の要素を削除する
| 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"} |




