At 3:52 PM -0500 11/8/01, Raymond E. Griffith wrote: >I am trying to work with the new array notation. Here is a >simple script. > >on mouseUp > put fld "A" into A > split A by return > put A + 1 into B > combine B using return > put B into fld "B" >end mouseUp > >In fld "A" I have the numbers 1 through 20. Upon combining >B, the results are returned in a seemingly random order. The >results are > >2.000000 >11.000000 >12.000000 >13.000000 >14.000000 >15.000000 >16.000000 >17.000000 >18.000000 >19.000000 >20.000000 >3.000000 >21.000000 >4.000000 >5.000000 >6.000000 >7.000000 >8.000000 >9.000000 >10.000000 > >I have some questions. First, how can I get the results in >the proper order? Using the sort command has not worked. >Secondly, how can I control the precision of calculations >using array math? Using set number format to "0.##" >does not work. Third, how can math functions other than >addition and multiplication be done with arrays (other than, >"for each element in A"). For example, exponentiation, >taking logs, etc. (handy stuff in statistical analysis, >BTW). > >Yes, I know. My third question can easily be handled with >element-by-element manipulation. > >But I note that there is a difficulty with the new repeat >form. The repeat for each form goes from lowest to highest, >as in > >put 0 into j >repeat for each line in A >add 1 to j >put a*2 into line j of B >end repeat > >This will work because we can be assured that the repeat for >each form ascends numerically. > >But in the case of an associative array, there is no >assurance of this ascension, particularly because keys(A) is >returned in such a strange order. Furthermore, not every >associative array will be indexed as A[1], A[2], etc... > >So how do I follow the ascension characteristics of >something like this? > > repeat for each element i in A > put a*2 into B[same key as A] > end repeat > >I am excited about the possibilities. But the trouble with >returning a split variable after combining is rather >daunting. Any help would be appreciated.
The ordering isn't random -- it's a standard text sort. You get 2,11,12... as your results because if the keys of an array are the numbers 1 through 21, then the keys sorted by text are: 1,10,11,12,13,14,15,16,17,18,19,20... So the math is working, and the order (by text) is maintained. To get the results back in numeric order, after the combine try: sort lines of B numeric I don't know how to change the number format you're getting back, other than doing a repeat for each loop, which I understand defeats the purpose. regards, Geoff Archives: http://www.mail-archive.com/[email protected]/ Info: http://www.xworlds.com/metacard/mailinglist.htm Please send bug reports to <[EMAIL PROTECTED]>, not this list.
