[Gambas-user] sort multidimensional arrays

Benoît Minisini gambas at ...1...
Mon Oct 26 13:51:26 CET 2009


> Is there a way to sort an array that has more than one dimension by telling
>  Gambas on which field the sorting shoiuld be done?
> 
> For example, if I have the array
> Max, 14
> Anna, 8
> Fabien, 7
> 
> I would expect the result of sorting by the first field to be
> Anna, 8
> Fabien, 7
> Max, 14
> 
> Instead, when using Array.Sort, I get
> 7, 8
> 14, Anna
> Fabien, Max
> 
> which is useless.
> 
> I have a workaround now, reading the array into a single-dimensioned array
>  like Max~14
> Anna~8
> Fabien~7
> 
> and then sort it, which produces
> Anna~8
> Fabien~7
> Max~14
> 
> and then split and read everything back to the original array:
> Anna, 8
> Fabien, 7
> Max, 14
> 
> But that just works, it's not really elegant.
> Somebody knows a better way?
> 
> Thanks
> Matti
> 

Not really. The array Sort() method is very simple, as it sorts the contents 
of the array linearly, whatever the number of dimensions is.

A workaround is using a Object[], and storing each line of your table inside 
by using a dedicated class, or another array. 

Sorting an Object[] calls the "_compare" public method on each object. This 
way you can sort the array the way you want. Look at the documenation of 
Object[].Sort() in the wiki for more details.

In Gambas 3, you don't have to use an Object[], you can use a Variant[][] 
instead.

Regards,

-- 
Benoît Minisini




More information about the User mailing list