Loïc Grenié on Mon, 12 May 2025 08:32:56 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: question on compare functions for the vecsort command


On Mon 12 May, 2025, at 05:50, American Citizen wrote:
Hello:

Suppose we have a small vector composed of 4 component vectors, say

V = [ [1,7,5,2], [3,7,1,4], [2,0,6,9], [8,0,5,1], etc...]

What is the compare function for vecsort(V, compare_function, flag) so
that I can

1. sort the 2nd column by ascending size, then sort the 3rd column by
descending size?

V = [ [1,7,5,2], [3,7,1,4], [2,0,6,9], [8,0,5,1] ];
vcmp(a,b)=if(a[2]!=b[2],a[2]-b[2],b[3]-a[3]);
vecsort(V,vcmp)
\\ [[2, 0, 6, 9], [8, 0, 5, 1], [1, 7, 5, 2], [3, 7, 1, 4]

    I interpreted "then" as "if the 2nd components are equal, then
  consider the 3rd"

    You can inline the function as well:

vecsort(V,(a,b)->if(a[2]!=b[2],a[2]-b[2],b[3]-a[3]))
\\ [[2, 0, 6, 9], [8, 0, 5, 1], [1, 7, 5, 2], [3, 7, 1, 4]]
 
2. add the 3rd column to the 4th column, if the 2nd column > 1st column?

     You want to change the elements of the vector? This is not a work
  for vecsort, but for apply

apply(a->if(a[2]>a[1],a[4]+=a[3]);a,V)

  (or vecsor(V,vcmp), or you can vecsort afterwards)

       Hope this helps,

             Loïc