MODEL:
! Illustrating sorting in LINGO; ! Keywords: Sorting, Rank order;
SETS:
 CITY:
  LAT,     ! Its latitude;
  SORTPOS, ! Its rank in distance from equator;
  SORTORD; ! The item in position k in sorted order;
ENDSETS
DATA: CITY = LONDON, PARIS, NYC, LA, MOSCOW, TOKYO; LAT = 51.3 48.5 40.4 34.1 55.5 35.4; ENDDATA CALC: @SET('TERSEO',2); ! Turn off default output; ! Get the rank order by latitude of each city SORTPOS(i) = sort position of LAT(i), increasing order; SORTPOS = @RANK(LAT); @WRITE(' City Latitude Rank', @NEWLINE(1)); @FOR( CITY(i): @WRITE( @FORMAT(CITY(i),'8s'),' ', LAT(i),' ', SORTPOS(i), @NEWLINE(1)); ); ! Put in sorted order increasing, in vector SORTORD; ! SORTORD(i) = item in position i; @FOR( CITY(i): SORTORD(SORTPOS(i)) = i; ); @WRITE(@NEWLINE(1),' Cities in Latitude increasing order',@NEWLINE(1)); @FOR( CITY(i): @WRITE( @FORMAT( CITY( SORTORD( i)),'8s'),' ', LAT(SORTORD(i)), @NEWLINE(1)); ); ! Put in sorted order decreasing, in vector SORTORD; NCITY = @SIZE( CITY); @FOR( CITY(i): ! To put in decreasing order, use; SORTORD( NCITY + 1 - SORTPOS( i)) = i; ); @WRITE(@NEWLINE(1),' Cities in Latitude decreasing order',@NEWLINE(1)); @FOR( CITY(i): @WRITE( @FORMAT(CITY(SORTORD(i)),'8s'),' ', LAT(SORTORD(i)), @NEWLINE(1)); ); ENDCALC