Sorting Arrays

J. Landman Gay jacque at hyperactivesw.com
Sat Aug 12 12:35:47 EDT 2023


I used a short, one-dimensional numbered array:

put the weekdayNames into tDataA
split tDataA by cr
simpleSortNumberedArray tDataA, "descending,text"

But as Alex explained, one dimension wasn't enough.

--
Jacqueline Landman Gay | jacque at hyperactivesw.com
HyperActive Software | http://www.hyperactivesw.com
On August 11, 2023 7:09:50 PM Bob Sneidar via use-livecode 
<use-livecode at lists.runrev.com> wrote:

> Send me what you have. Thanks.
>
> Sent from my iPhone
>
>> On Aug 11, 2023, at 17:02, Alex Tweedly via use-livecode 
>> <use-livecode at lists.runrev.com> wrote:
>>
>> ?
>>> On 11/08/2023 23:00, J. Landman Gay via use-livecode wrote:
>>> On 8/10/23 2:29 PM, Alex Tweedly via use-livecode wrote:
>>> [ ... code from earlier posting ...]
>>
>>> I couldn't get this to work until I altered it, but I was using a very 
>>> simple array. What type of array data did you use? I think I'm missing 
>>> something.
>>>
>>> I just did this:
>>>
>>>   put the weekdayNames into tDataA
>>>   split tDataA by cr
>>>   simpleSortNumberedArray tDataA, "descending,text"
>>>
>> What you're missing is that this (simpleSortNumberedArray) is only intended 
>> for "numbered array"s (which LC is calling "sequences" in some places); 
>> i.e. an array where the (top-level) keys are all consecutive integers, from 
>> 1 .... n
>>
>> Also, the pSortkeys should be a number of comma-separated items, each of 
>> which consists of a key by which you want to sort the array followed 
>> optionally by an order and type.
>>
>> So you might do something like :
>>
>>> on mouseup
>>>    local tCounter, tDataA
>>>
>>>    repeat for each line L in the weekdayNames
>>>       add 1 to tCounter
>>>       put L into tDataA[tCounter]["dayname"]
>>>       put the number of chars in L into tDataA[tCounter]["charcount"]
>>>    end repeat
>>>
>>>    -- sorts ascending by name (i.e. F, M, Sa, Su, Th, Tu, W)
>>>    simpleSortNumberedArray tDataA, "dayname"
>>>    repeat with I = 1 to 7
>>>       put tDataA[I]["charcount"] && tDataA[I]["dayname"] & CR after msg
>>>    end repeat
>>>
>>>    put "---------" &CR after msg
>>>
>>>    -- sorts descending numeric by number of characters in name
>>>    --  NB within each char count value, they remain in alphabetical order of name
>>>    simpleSortNumberedArray tDataA, "charcount numeric descending"
>>>    repeat with I = 1 to 7
>>>       put tDataA[I]["charcount"] && tDataA[I]["dayname"] & CR after msg
>>>    end repeat
>>> end mouseup
>> and get as output
>>
>>> 6 Friday
>>> 6 Monday
>>> 8 Saturday
>>> 6 Sunday
>>> 8 Thursday
>>> 7 Tuesday
>>> 9 Wednesday
>>> ---------
>>> 9 Wednesday
>>> 8 Saturday
>>> 8 Thursday
>>> 7 Tuesday
>>> 6 Friday
>>> 6 Monday
>>> 6 Sunday
>>
>> So - it would be worth adding a check that the array passed in is indeed a 
>> sequence, at the start of simpleSortNumberedArray:
>>
>> if NOT (pArrayDataA is an array AND \
>>            item 2 of extents(pArrayDataA) is the number of elements in pArrayDataA) then \
>>                  return pArrayData
>>
>> I'm now going to add this to my personal library, but I'll rename it to
>>
>>     seqSortMultipleKeys
>>
>> Alex.
>>
>>
>>
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your 
>> subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your 
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode






More information about the use-livecode mailing list