Sorting Arrays

Bob Sneidar bobsneidar at iotecdigital.com
Sat Aug 12 18:22:18 EDT 2023


I formatted the sortKeys as I would an SQL query or an LC sort, but then I needed to isolate the key from the parameters because I couldn’t assume the sort key was simply the first word. 

Sent from my iPhone

> On Aug 12, 2023, at 09:36, J. Landman Gay via use-livecode <use-livecode at lists.runrev.com> wrote:
> 
> 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
> 
> 
> 
> 
> _______________________________________________
> 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