Is there way to get a Record by the value of one of its keys without looping?
I've been doing this:
set theKey to 22
set theRecords to {{key:11, value:"foo"}, {key:22, value:"bar"}}
repeat with theRecord in theRecords
if key of theRecord = theKey then
display dialog (key of theRecord as text) & ":" & value of theRecord
end if
end repeat
Best Answer
I suppose that you are worried about the speed of iterating. Iterating would be a time of order-n O(n).
In AppleScript, you can possibly use a record of records instead of a list of records, but I believe that then the class of the key would have to be an identifier -- not integer like in your example.
Here is a link to somebody with a similar question: Emulating associative arrays in AppleScript
Lauri Ranta's answer is to use the command-line tool called "awk".
The solution that I toyed with was to make a faceless background app that would be what is called an "Agent" which AppleScript's could call upon for using its datastructures such as an associative array (also known as a dictionary or a Mapping.)
I didn't get my solution done. It's just an idea, but you could use Lauri's answer, she usually knows what she's talking about.
Since I know a little Pyton, and since Pyton comes with OS X, pre-installed in the System Folder, I would consider using Python myself.
I tried it again in "pure AppleScript" with the following code which I'm not really happy with:
You can mix shell script and AppleScripts:
Or, you can call an AppleScript from a shell script with the command-line tool called "osascript".