• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag
 

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
RE: multi-dimensional arrays (new to AS)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: multi-dimensional arrays (new to AS)


  • Subject: RE: multi-dimensional arrays (new to AS)
  • From: "Wallace, William" <email@hidden>
  • Date: Wed, 26 May 2004 13:10:04 -0500
  • Thread-topic: multi-dimensional arrays (new to AS)

Is verboten! I had a situation a few months back where such a maneuver would have really come in handy, but I discovered (with the help of some folks from this list) that it can't be done that way.

Here is a link to the thread where it was explained to me:

http://lists.apple.com/archives/applescript-users/2003/Dec/05/usingvariablesinplaceofp.001.txt

B!ll

PS - sorry about any goofy line wraps. This list server doesn't like the way Outlook Exchange formats email (neither do I for that matter)

> ----------
> From: email@hidden on behalf of Sprague, Graham
> Sent: Wednesday, May 26, 2004 11:01 AM
> To: Jeff Hartman; 'Graff'
> Cc: Applescript List
> Subject: RE: multi-dimensional arrays (new to AS)
>
> Hey Jeff,
>
> You seem pretty knowledgable when it comes to lists and records. I have a
> question for you.
>
> Is it possible to access a Key:value pair from a record when the key is
> stored in a variable.
>
> for example this causes an error but may illustrate what I'm attempting to
> do...
>
> > set theRecord to {mike: 1, jill: 10, sue: 3, paul: 20}
> >
> set keyToSearchFor to "mike"
>
> set valueForKey to keyToSearchFor of theRecord-- Does not work gives error
> "cant get keyToSearchFor of {mike: 1, jill: 10, sue: 3, paul: 20}"
>
>
> Seems like it's not accepting the variable contents, in this case "mike"
> and is attempting to use the variable name, in this case "keyToSearchFor" as
> the key.
>
>
> Any help would be great.
>
> Thanks,
> Graham
>
>
> > ----------
> > From: Graff
> > Sent: Tuesday, April 20, 2004 9:45 PM
> > To: Jeff Hartman
> > Cc: Applescript List
> > Subject: Re: multi-dimensional arrays (new to AS)
> >
> > On Apr 20, 2004, at 2:28 PM, Jeff Hartman wrote:
> >
> > > Bear with me as I am pretty new to applescript. Sorry for terminology
> > > if not
> > > correct.
> > >
> > > I have a list containing server volumes. Each server item in the list
> > > contains a list of connection strings. Trying to fit into a Window
> > > environment here...
> > >
> > > So:
> > >
> > > set theList to {server1:{ipaddress:"x.x.x.x",path:"blah"}, server2:{
> > > ....
> >
> > That isn't an array or a list, it is a record. A record is a series of
> > key-value pairs, a list is a series of values. You can't iterate
> > through a record, you need to access each value by supplying the key
> > that the value is attached to.
> >
> > For example, this is a list:
> > set theList to {1, 2, 3, 4, 5}
> >
> > You would access each item in the list in several ways. One way is
> > direct access:
> > set theValue to item 1 of theList
> >
> > Another is through a repeat statement:
> > set sum to 0
> > repeat with theValue in theList
> > set sum to sum + theValue
> > end repeat
> >
> > You could also do this the long way:
> > set sum to 0
> > repeat with i from 1 to length of theList
> > set sum to sum + item i of theList
> > end repeat
> >
> > Both repeats are roughly equal, the first one is a shortcut for
> > iterating through a list.
> >
> > This is a record:
> > set theRecord to {mike: 1, jill: 10, sue: 3, paul: 20}
> >
> > A record has a key, followed by a colon (:), followed by the value.
> > Each key-value pair is separated from the next pair by a comma. Values
> > can be of any type of variable possible in AppleScript
> >
> > You can have lists of lists, records of lists, lists of records, etc.
> > Basically you are just storing one set of objects inside another. For
> > example:
> > set listList to {{1, 2, 3}, {1, 3, 5}, {2, 4, 6, 8}}
> >
> > You'll notice that the objects don't even have to be the same type or
> > of the same length:
> > set anotherList to {1, {2 , 4, 6}, {3, 5}, "boo"}
> >
> > In order to get the value of any item in the record you need to get it
> > explicitly:
> > set theRecord to {mike: 1, jill: 10, sue: 3, paul: 20> }
> > set theValue to mike of theRecord
> > --> 1
> > (1 is the value stored in theValue)
> >
> > To sum up all the values you need to get each one individually:
> > set sum to 0
> > set sum to sum + mike of theRecord
> > set sum to sum + jill of theRecord
> > set sum to sum + sue of theRecord
> > set sum to sum + paul of theRecord
> >
> > You can also coerce a record into a list. This will lose all of the
> > keys and will copy only the values into a list:
> > set theList to theRecord as list
> > --->{1, 10, 3, 20}
> > (this is what is stored in theList)
> >
> > Then you can sum them up:
> > set theRecord to {mike: 1, jill: 10, sue: 3, paul: 20}
> > set theList to theRecord as list
> > set sum to 0
> > repeat with theValue in theList
> > set sum to sum + theValue
> > end repeat
> >
> > To iterate through a list of lists you would do a nested loop:
> > set listList to {{1, 2, 3}, {1, 3, 5}, {2, 4, 6, 8}}
> > set sum to 0
> > repeat with aList in listList
> > repeat with theValue in aList
> > set sum to sum + theValue
> > end repeat
> > end repeat
> >
> > > set theList to {server1:{ipaddress:"x.x.x.x",path:"blah"}, server2:{
> > > ....
> > >
> > > what I want to do is walk the array (repeat with?) and connect to each
> > > server using the list of connection strings:
> > >
> > > mount volume smb://domain;uid:password@ipaddress/path
> > >
> > >
> > > Each connection must be dropped before connecting to the next.
> > >
> > > I wondering how I can walk the arrays.
> >
> > Coming back to your example:
> > set theStructure to {server1:{ipaddress:"x.x.x.x", path:"foo"},
> > server2:{ipaddress:"y.y.y.y", path:"bar"}}
> >
> > This is a record of records. I'm assuming that the actual key of each
> > server (the names server1, server2, etc.) doesn't matter so we can just
> > throw it away and create a list of records:
> > set theList to theStructure as list
> > -->{{ipaddress:"x.x.x.x", path:"foo"}, {ipaddress:"y.y.y.y",
> > path:"bar"}}
> >
> > Now since the interior records are the same between each item we can
> > iterate through the items and use each record (I included all of the
> > lines of the example here):
> > set theStructure to {server1:{ipaddress:"x.x.x.x", path:"foo"},
> > server2:{ipaddress:"y.y.y.y", path:"bar"}}
> > set theList to theStructure as list
> > repeat with aServer in theList
> > set theAddress to ipaddress of aServer
> > set thePath to path of aServer
> > mount volume "smp://domain;uid:password@" & theAddress & thePath
> > -- do other stuff here
> > end repeat
> >
> > And that's the whole tutorial! :-)
> >
> > - Ken
> > _______________________________________________
> > applescript-users mailing list | email@hidden
> > Help/Unsubscribe/Archives:
> > http://www.lists.apple.com/mailman/listinfo/applescript-users
> > Do not post admin requests to the list. They will be ignored.
_______________________________________________
applescript-users mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/applescript-users
Do not post admin requests to the list. They will be ignored.


  • Prev by Date: global variables
  • Next by Date: Re: A funny think happened...
  • Previous by thread: Re: multi-dimensional arrays (new to AS)
  • Next by thread: global variables
  • Index(es):
    • Date
    • Thread