2つの1D List(1次元配列)同士を加算するAppleScriptです。
よく書き捨てていますが、AppleScriptにそんな命令はないのでループで加算することになります。
最近では、Musicの楽曲ライブラリ中の曲の、カテゴリごとの最終再生日時の分布集計を行なったときに、「Classical」「クラシック」などの表記ゆれを吸収するために、これらの複数カテゴリのデータを合成するときに使いました。
AppleScript名:1D Listの加算 |
set s1List to {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0} set s2List to {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 4, 5, 5, 4, 6, 6, 7, 1, 0, 0, 0} set sRes to addTwoList(s1List, s2List) of me –> {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 4, 5, 5, 4, 6, 7, 7, 1, 0, 0, 0} on addTwoList(s1List, s2List) set s3List to {} set s1Len to length of s1List set s2Len to length of s2List if s1Len is not equal to s2Len then return false repeat with ii from 1 to s1Len set tmp1 to contents of item ii of s1List set tmp2 to contents of item ii of s2List set the end of s3List to (tmp1 + tmp2) end repeat return s3List end addTwoList |
書き捨てレベルだとこんな感じ(↑)ですが、今後使い回すことを考えて書いておくと、こんな感じ(↓)でしょうか。データ数が増えたときの対策と、複数の1D Listを連続して大量に加算する必要が発生した際への対策を行なっています。
AppleScript名:1D List同士の加算 v2 |
set s1List to {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 4, 5, 5, 4, 6, 6, 7, 1, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}}
set sRes to addMutipleLists(s1List) of me –> {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 5, 3, 5, 6, 7, 6, 8, 8, 8, 2, 1, 1, 1} on addMutipleLists(s1List) script spdAdd property s1List : {} property s3List : {} end script copy s1List to (s1List of spdAdd) –init set s1Len to length of first item of (s1List of spdAdd) set (s3List of spdAdd) to makeZero1DList(s1Len, 0) of me repeat with i in (s1List of spdAdd) set tmpLen to length of i if tmpLen is not equal to s1Len then return false repeat with ii from 1 to s1Len set tmp1 to contents of item ii of (s3List of spdAdd) set tmp2 to contents of item ii of i set item ii of (s3List of spdAdd) to (tmp1 + tmp2) end repeat end repeat return (s3List of spdAdd) end addMutipleLists –指定要素を指定回数追加したリストを作成する on makeZero1DList(itemMax, itemElem) set allData to {} repeat itemMax times set the end of allData to itemElem end repeat return allData end makeZero1DList |
More from my site
(Visited 71 times, 1 visits today)