Archive for the 'NSOrderedSet' Category

2014/11/21 1D Listのユニーク化(asoc) 処理内容比較

1D Listのユニーク化の方法について、Shane Stanleyからいろいろと助言をもらいました。

Shaneは処理速度について高速化のために提案してくれたのですが、10万アイテムのListに対して10回計測で平均をとってみたら、「いずれも高速ではあるものの、それほど変わらない」という結果に(#1より#2,#3の方が微妙に高速)。

問題は、ユニーク化したあとの結果。ソートされているものもあれば、されていないものもある、という状況。

少々疑問点があったので、小数点以下の値やマイナスの値などいろいろ突っ込んで追試に次ぐ追試を行ってみたところ・・・数値リストのユニーク化については、結果はどれも「ソートずみの値」として使ってはいけないということに。

uniquify.png

AppleScript名:listのユニーク化(asoc)_method1
– Created 2014-11-19 by Takaaki Naganoya
– 2014 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “ASObjCExtras”

set aList to {-1, 4, 4, 4, 4, 4, 1, 2, 3, 1, 2, 1.1, -1.1}

set aArray to current application’s NSArray’s arrayWithArray:aList
set bArray to aArray’s valueForKeyPath:“@distinctUnionOfObjects.self”

set bList to bArray’s ASify() as list
–> {3, -1, 1, 1.1, -1.1, 4, 2}

★Click Here to Open This Script 

AppleScript名:listのユニーク化(asoc)_method2
–By Shane Stanley
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “ASObjCExtras”

set aList to {-1, 4, 4, 4, 4, 4, 1, 2, 3, 1, 2, 1.1, -1.1}

set theSet to current application’s NSOrderedSet’s orderedSetWithArray:aList
set bArray to theSet’s array() – get set’s items as array
set bList to bArray’s ASify() as list
–> {-1, 4, 1, 2, 3, 1.1, -1.1}

★Click Here to Open This Script 

AppleScript名:listのユニーク化(asoc)_method3
–By Shane Stanley
use scripting additions
use framework “Foundation”
use framework “ASObjCExtras”

set aList to {-1, 4, 4, 4, 4, 4, 1, 2, 3, 1, 2, 1.1, -1.1}

set theSet to current application’s NSSet’s setWithArray:aList
set bArray to theSet’s allObjects() – get set’s items as array
set bList to bArray’s ASify() as list
–>{3, -1, 1, 1.1, -1.1, 4, 2}

★Click Here to Open This Script