Simple Arrays
Michael Kann
mikekann at yahoo.com
Sun Jan 10 11:55:12 EST 2010
While trying to rassle these arrays to the ground I tried to transpose one. The following script doesn't work. Can anyone see why? (Need some fresh eyes).
------------------------------
on mouseUp
put 1 into myArray[1][1]
put 2 into myArray[1][2]
put 3 into myArray[2][1]
put 4 into myArray[2][2]
put myArray[2][1] into fld 1 -- works til here
put transpose(myArray) into yourArray -- causes problem
put yourArray[2][1] into fld 2
end mouseUp
-------------------
From the dictionary:
The array is a two-dimensional array variable whose elements are
numbers, and whose keys are sequential numbers.
It seems like the constraints have been met. In the above examples I assume the "elements" would be 1,2,3,4 ? Why would the elements be restricted to numbers? All we are doing is switching the two keys.
-------------------------------------------------------------------
Thomas,
In answering the question concerning
-- the 'best' way to enter Bob's data into an array --
I think the usual concern is that you are given a set of data formatted in a certain way and then you have to shoehorn it into an array. If you want the final array to resemble an Excel spreadsheet (each piece of data gets its own row and column number) then the repeat loop I posted a few messages back would do it. We can call that the easiest way until someone posts an easier one.
-----------------------
Here's the code for populating an array:
-----------------------
-- as an example, put your 4 lines into fld 1
-----------------------
1,A,Green
2,B,Blue
3,C,Orange
4,D,White
-----------------------
-- to get those 4 lines into a multi-dimensional
-- array called myArray I think you need code
-- like below (which you already know)
-- There might be an easier way.
-----------------------
on mouseUp
put fld 1 into v
set itemDelimiter to comma
put zero into countLine
repeat for each line curLine in v
add 1 to countLine
put zero into countItem
repeat for each item curItem in curLine
add 1 to countItem
put curItem into myArray[countLine][countItem]
end repeat
end repeat
put myArray[1][2] into fld 2
end mouseUp
-----------------------
-- will end up with "A" in fld 2
-----------------------
--- On Sun, 1/10/10, Thomas McGrath III <mcgrath3 at mac.com> wrote:
> From: Thomas McGrath III <mcgrath3 at mac.com>
> Subject: Re: Simple Arrays
> To: "How to use Revolution" <use-revolution at lists.runrev.com>
> Date: Sunday, January 10, 2010, 7:52 AM
> Pardon my question, but I have
> learned more about arrays in these four posts than I ever
> thought about before:
>
> So given that I would want a multi-dimensional array where
> theData[2][3] = "Blue" as in the examples provided, what is
> the 'best' way to enter data into this array, or is the way
> Bob did it the best way?
>
> Workflow:
> First;
> >> put "1"& comma& "A"&
> comma& "Green"& return into theData
> >> put "2"& comma& "B"&
> comma& "Blue"& return after theData
> >> put "3"& comma& "C"&
> comma& "Orange"& return after theData
> >> put "4"& comma& "D"&
> comma& "White"& return after theData
> Then ;
> split theData with cr
>
> Would this get me theData[2][3] = "Blue" ??? I thought the
> delimiter was TAB?
>
> Would this be better:
> put "1"& tab& "A"& tab& "Green"& return
> into theData
>
> OR is this all wrong and if so what is the 'best' way to
> enter a lot data into a mutli-dimensional array to get these
> results??
> Thank you for this.
>
> Tom McGrath III
> Lazy River Software
> 3mcgrath at comcast.net
>
> iTunes Library Suite - libITS
> Information and download can be found on this page:
> http://www.lazyriversoftware.com/RevOne.html
>
> On Jan 9, 2010, at 9:37 PM, Phil Davis wrote:
>
> > Hi Bob,
> >
> > On 1/9/10 5:12 PM, Bob Sneidar wrote:
> >> Hi all.
> >>
> >> Apparently I am not getting arrays AT ALL. I would
> think that given:
> >>
> >> put "1"& comma& "A"&
> comma& "Green"& return into theData
> >> put "2"& comma& "B"&
> comma& "Blue"& return after theData
> >> put "3"& comma& "C"&
> comma& "Orange"& return after theData
> >> put "4"& comma& "D"&
> comma& "White"& return after theData
> >>
> >> which would get me:
> >> 1,A,Green
> >> 2,B,Blue
> >> 3,C,Orange
> >> 4,D,White
> >>
> >
> > Actually either of these:
> >
> > split theData with cr
> > split theData by row -- where the
> rowDelimiter is CR
> >
> > would get you this:
> >
> > theData[1] = "1,A,Green"
> > theData[2] = "2,B,Blue"
> > theData[3] = "3,C,Orange"
> > theData[4] = "4,D,White"
> >
> >> I could then split by column (or by row I get
> confused) and get a simple array where:
> >> theData[1,1] = "1"
> >> theData[1,2] = "A"
> >> theData[2,1] = "2"
> >> theData[4,3] = "White"
> >>
> >> And so forth. However, this is NOT the case!
> >
> > Right. Technically speaking, comma is not an array
> index separator. Commas in our array keys help us
> conceptually represent multiple array dimensions in our own
> minds, but Rev sees an array with such keys as a simple
> one-dimensional array with alphabetic keys (since commas are
> not numerals).
> >
> > Until version 3.0, Rev couldn't handle true
> multi-dimensional arrays. Since then, the thing that tells
> Rev "this is a multi-dimensional array" is multiple keys per
> element, with each key in its own bracket. Like this:
> >
> > theData[1][1] = "1"
> > theData[1][2] = "A"
> > theData[1][3] = "Green"
> >
> >
> > Now do you see why 'transpose()' wouldn't work with
> your array? In part it's because your keys aren't numeric -
> they contain commas. (Also they have to be sequential
> numbers.)
> >
> > Welcome to array re-education camp! ;-)
> >
> > Phil Davis
> >
> >
> >> If it were, I could issue a command:
> >>
> >> put transpose(theData) into myArray
> >>
> >> and:
> >> myArray[1,2] = 2
> >> myArray[1,3] = 3
> >>
> >> and so on. If I got the entire row (I think
> there's a function for that) then I would have effectively
> gotten the column of the original data. Seems reasonable
> eh?
> >>
> >> So can someone please explain to me why I cannot
> get a simple x,y row,column grid-like array using these
> simple commands? Revolution seems to think that the first
> column MUST be the key! I would LIKE for revolution to
> simply create it's OWN numerical keys and let my data be my
> data. Maybe in the future add an argument to the split and
> combine commands to tell it whether or not I WANT Revolution
> to treat my first column as the key?
> >>
> >> If arrays worked like I described above, it would
> be a simple matter to get a single column of an array, just
> by transposing it and getting an entire row, instead of
> writing complex repeat loops to get a column of data. Am I
> missing something here?
> >>
> >> Thanks for any wisdom you can give. I can save
> some helpful souls the trouble of responding by saying I am
> capable of making repeat loops to accomplish this. I was
> just hoping that maybe I was missing something and I can in
> fact do what I thought I could.
> >>
> >>
> Bob_______________________________________________
> >> use-revolution mailing list
> >> use-revolution at lists.runrev.com
> >> Please visit this url to subscribe, unsubscribe
> and manage your subscription preferences:
> >> http://lists.runrev.com/mailman/listinfo/use-revolution
> >>
> >>
> >
> > --Phil Davis
> >
> > PDS Labs
> > Professional Software Development
> > http://pdslabs.net
> >
> > _______________________________________________
> > use-revolution mailing list
> > use-revolution at lists.runrev.com
> > Please visit this url to subscribe, unsubscribe and
> manage your subscription preferences:
> > http://lists.runrev.com/mailman/listinfo/use-revolution
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage
> your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
>
More information about the use-livecode
mailing list