I should have given better context. I one only sorts the same field numeric, 
one gets:

123

132

213

231

312

321

Which is correct given the list of whole numbers in question. The stable sort 
allows one to then sort by char 3 of each, to get the result in the “compound” 
sort below.

So am I missing something in all this?

Craig


> On Sep 5, 2023, at 10:29 AM, Craig Newman via use-livecode 
> <use-livecode@lists.runrev.com> wrote:
> 
> I may be simply misunderstanding…
> 
> Since HC days, one could concatenate sort criteria using the “&” character, 
> and obtain multiple stable sorts in one go. In LC as well, since given, in a 
> field 1:
> 
> 231
> 
> 312
> 
> 123
> 
> 213
> 
> 321
> 
> 132
> 
> and in a button somewhere:
> 
> on mouseUp
> 
> get fld 1
> 
> sort it numeric by char 1 of each & char 3 of each
> 
> answer it
> 
> end mouseUp
> 
> We get:
> 
> 132
> 
> 123
> 
> 231
> 
> 213
> 
> 321
> 
> 312
> 
> 
> 
> Craig
> 
> 
> 
> 
>> On Sep 3, 2023, at 8:29 AM, matthias rebbe via use-livecode 
>> <use-livecode@lists.runrev.com> wrote:
>> 
>> Hello Mark,
>> 
>> thanks for explanation and also for your solution. I will try. 
>> 
>> Maybe i should get my book "regular expressions"  from  Jeffrey E.F.Friedl 
>> from the shelf and should finish reading it, so i could make use of regular 
>> expressions  in Livecode more often. 
>> 
>> Regards,
>> Matthias
>> 
>>> Am 03.09.2023 um 11:49 schrieb Mark Waddingham via use-livecode 
>>> <use-livecode@lists.runrev.com>:
>>> 
>>> On 2023-09-03 10:26, panagiotis m via use-livecode wrote:
>>>> Hello Matthias,
>>>> I do not think that the syntax "sort <container> by sortKey1 and sortKey2"
>>>> is supported
>>> 
>>> Heh technically it 'is' - and does do something but it won't be what you 
>>> expected...
>>> 
>>> So the syntax for sort in this case is:
>>> 
>>> sort <container> by <expression>
>>> 
>>> This works by iterating over the elements in <container>, passing each 
>>> through the expression to generate a sort key list, sorting that list and 
>>> then reordering the original list.
>>> 
>>> Expressions can contain the boolean 'and' operator, so:
>>> 
>>> sort <container> by X and Y
>>> 
>>> Means that the sort key is evaluated as 'X and Y' for each element - 
>>> meaning sort ends up sorting a list of 'true' and 'false' values.
>>> 
>>> As Panos says, if you want to sort by separate fields with decreasing 
>>> priority you need to do multiple sorts from least priority to most - this 
>>> works because 'sort' is stable (if two elements compare the same, then the 
>>> order of them in the output list is the same as the first).
>>> 
>>> The alternative is to work out a sort expression which combines the two 
>>> parts of the element you want to sort so that the sort keys sort in that 
>>> order. This can be quite tricky, but (for example) - let's say your 
>>> container has elements of the form:
>>> 
>>> <section-number>,<sub-section-number>
>>> 
>>> So you want things in the 'obvious' sorted order - then you could use:
>>> 
>>> sort tSections ascending text by format("%08d%08d", item 1 of each, item 2 
>>> of each)
>>> 
>>> Here the sortkey is defined so that the text sort of the sort keys is that 
>>> same as sorting first by sub-section number and then by section number.
>>> 
>>> Warmest Regards,
>>> 
>>> Mark.
>>> 
>>> -- 
>>> Mark Waddingham ~ m...@livecode.com ~ http://www.livecode.com/
>>> LiveCode: Build Amazing Things
>>> 
>>> _______________________________________________
>>> use-livecode mailing list
>>> use-livecode@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@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@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@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to