ReIndex Macro for Filtering and Sorting Data

Started by Charles Pegge, February 16, 2025, 11:12:31 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Charles Pegge

The reindex macro uses a merge-sort algorithm, one if the fastest. You can use any criteria for this operation by setting up filter and compare macros. They are equivalent to callbacks from reindex, but do not have the overheads associated with functions:

'filtering and indexing
'======================
uses console
'
'SOME DATA:
===========
dim string s=
{
  "socks","carrots","oranges","desks",
  "zebra","grapes","eternity","arrow","yurt"
}
print ubound(s) cr
'
'SETUP FILTERING AND SORTING SPEC

macro filter(ok,a)
==================
if asc(s[a])>=0x79 'yz'
  ok=0
else
  ok=1
endif
end macro
'
macro comparator(swap,a,b)
==========================
'ascending order
if s[a]>s[b] then swap=1
end macro
'
'BUILD INDEX
'
reindex (idx,ubound(s),count,filter,comparator)


'DISPLAY RESULT USING IDX

print cr count cr
int i,j
for i=1 to count
  j=idx[i]
  print s[j] cr
next
del idx 'when done
wait