2つのレコードのキーの重複を検出するAppleScriptです。
こういう処理がお手軽にできるようになったので、macOS 10.10以降のAppleScriptでないとプログラムが組めなくなっている今日このごろ。死ぬほど努力してOld Style AppleScript(Cocoaの機能を使わない)だけで組めないこともないですが、それだけで半日は費やして数百行のプログラムになってしまいそうです。
というわけで、Cocoaの機能を利用した「ありもの」のルーチンを組み合わせるだけでほぼ完成。2つのレコードのキーの重複計算を行います。
どういう用途で使うかといえば、パラメータつきのURLに対して追加パラメータを付加したい場合です。URLからレコード形式でパラメータを分離し、追加パラメータ(レコード形式)を足し算する「前」に、2つのレコード間で重複キーがないかチェックする、という用途です。
では、2つのレコードの加算はどーするのか? という話になりますが、それは単に&演算子で加算するだけです。
set aRec to {abc:"1", bcd:"2"}
set bRec to {ccc:"0", ddd:"9"}
set cRec to aRec & bRec
–> {abc:"1", bcd:"2", ccc:"0", ddd:"9"}
★Click Here to Open This Script
AppleScript名:2つのレコードのキーの重複を計算.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/09/06 — – Copyright © 2019 jp.piyomarusoft, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions property NSSet : a reference to current application’s NSSet property NSCountedSet : a reference to current application’s NSCountedSet property NSMutableDictionary : a reference to current application’s NSMutableDictionary set aRec to {autoplay:"1", hd:"9"} set bRec to {v:"GP_tVXTYdmY", t:"120", hd:"3"} set dupKeys to detectDuplicateKeysInTwoRecords(aRec, bRec) of me –> {"hd"} on detectDuplicateKeysInTwoRecords(aRec, bRec) set aDict to NSMutableDictionary’s dictionaryWithDictionary:aRec set bDict to NSMutableDictionary’s dictionaryWithDictionary:bRec set aKeyList to (aDict’s allKeys()) as list set bKeyList to (bDict’s allKeys()) as list set allKeyList to aKeyList & bKeyList set aRes to returnDuplicatesOnly(allKeyList) of me return aRes end detectDuplicateKeysInTwoRecords –1D Listから重複項目のみ返す on returnDuplicatesOnly(aList as list) set aSet to NSCountedSet’s alloc()’s initWithArray:aList set bList to (aSet’s allObjects()) as list set dupList to {} repeat with i in bList set aRes to (aSet’s countForObject:i) if aRes > 1 then set the end of dupList to (contents of i) end if end repeat return dupList end returnDuplicatesOnly |
More from my site
(Visited 40 times, 1 visits today)