Simple Arrays

Michael Kann mikekann at yahoo.com
Sun Jan 10 12:23:37 EST 2010


Jim, thanks for the info. I'm really learning a lot sitting here in the coldest room in the house with the little electric heater blowing in my face. How's it in Las Vegas?

Thanks for weaning me of the Excel model of transpose. I was going by the RunRev dictionary. Since I can't get transpose to work using almost the exact same example they used I assume I am missing something obvious or the docs need revision. Let's see what the dictionary has to say and see if we can get something working.

Thanks again Jim for all your help.

Mike

-------------------------------------------------------------------
-- the dictionary entry for transpose:
-------------------------------------------------------------------
Comments:
A two-dimensional array is an array whose elements have a two-part key to describe them. You can visualize such an array as a set of rows and columns: the first part of each element's key is the row number, and the second part is the column number. For example, the expression myArray[3,2] describes the element of myArray which is in the third row, second column.

The transpose function simply swaps rows for columns. In other words, for each element in the array, the corresponding element in transpose(array) has its two parts switched one for the other. The value in the third row, second column is moved to the second row, third column.

The transpose function is its own inverse: you can transpose a transposed array again to recover the original array.

  Important!  If the array has missing elements, the transposefunction will fail to work. For example, an array that contains elements myArray[1,1], myArray[1,2], and myArray[2,2] cannot be transposed because the element myArray[2,1] is missing.
-------------------------------------------------------------------

--- On Sun, 1/10/10, Jim Ault <jimaultwins at yahoo.com> wrote:

> From: Jim Ault <jimaultwins at yahoo.com>
> Subject: Re: Simple Arrays
> To: "How to use Revolution" <use-revolution at lists.runrev.com>
> Date: Sunday, January 10, 2010, 11:05 AM
> An array with one key and one element
> (value) is two dimensions
> 
> myArray[1][1]   is three dimensions ( two
> keys and one element )
> 
> Again, Rev uses associative arrays.
> Transpose means switching the numeric *values* for the
> numeric  
> *keys*.  The keys must be sequential.
> 
> Excel transpose does not meant the same thing.
> Excel array notation and functions operate differently.
> 
> Rev would use a 'table' with
>       item j of line i of tabularData
> 
> Jim Ault
> Las Vegas
> 
> On Jan 10, 2010, at 8:55 AM, Michael Kann wrote:
> 
> > 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
> >>
> >
> >
> >
> > _______________________________________________
> > 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
> 
> Jim Ault
> Las Vegas
> 
> 
> 
> _______________________________________________
> 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