On 24/05/11 11:52, Kevin Fishburne wrote: > On 05/23/2011 10:01 PM, Kevin Fishburne wrote: > >> On 05/09/2011 09:59 PM, Benoît Minisini wrote: >> >>>> Think of it like a spreadsheet instead of an array. I need each "row" >>>> sorted by the value in a "column". The two column values are >>>> ObjectNumber and ObjectY and the row represents the array index. >>>> >>>> There's got to be something like this in GAMBAS, but if not I can start >>>> Google searching sort algorithms and make a procedure. >>>> >>> - Put the objects you have to draw on the screen in a temporary array. >>> - Define the (X,Y) final coordinates in two object variables. >>> - Implement the "_sort" special method in the object class. >>> >>> That way, you just have to call "Sort" to sort only the objects you want the >>> way you want. >>> >> The documentation didn't do much to alleviate my confusion, so if anyone >> understands this could you please post the simplest example possible? A >> link to the documentation on the _sort special method might be enough (I >> couldn't find it). As a refresher I'm basically trying to sort an array >> by one of its elements, much like sorting a spreadsheet >> > Looks like Matti had the same question back in 2009: > > http://old.nabble.com/sort-multidimensional-arrays-td26051359.html#a26059190 > > The proposed solution sounds similar to the response given to me, though > my feeble brain isn't able to convert it into code. Interesting that the > post mentions a variant can be used as well as an object. > > Matti, if you're out there, do you have an example of how you sorted the > example array in your post using these (or other) techniques? > > Kevin,
Here is the code I use to sort a tableview. It is constrained by a) only coping with string or numeric data b) only sorts ascending. but it may get you started PUBLIC SUB SELF_ColumnClick(Col AS Integer) '========================================== ' Sort the underlying gridview by the selected column. NB this will only ' sort the display data - any onscreen formatting that relies ' on the underlying data will refer to the "wrong row"! ' These are the two native arrays that we will sort using their own sort method DIM sarray AS NEW String[ME.Rows.Count] DIM narray AS NEW Float[ME.Rows.Count] ' We need a few indices to operate on the orginal array and the sort array DIM idx, idy AS Integer DIM ida, idv AS Integer ' This is a flag to tell us which sort array to use DIM numeric AS Boolean = TRUE ' First figure out if the column only contains numbers. If not then we will ' just use a string sort FOR idx = 0 TO ME.Rows.Count - 1 IF NOT IsNumber(Val(ME[idx, Col].Text)) THEN numeric = FALSE NEXT ' Now unload each item from the original array into the relevant sort array FOR idx = 0 TO ME.Rows.Count - 1 IF numeric narray[idx] = Val(ME[idx, Col].Text) ELSE sarray[idx] = ME[idx, Col].Text ENDIF NEXT ' and sort it! IF numeric narray.Sort(gb.Ascent) ELSE sarray.Sort(gb.Ascent + gb.Text) ENDIF ' Now the tricky bit, use the sorted sort array to reorder the original array FOR ida = 0 TO sarray.Max ' upper limit is the size of any of the arrays ' idv is the row offset for the original array ' in each loop, we only have to look "downwards" from where we are in the ' sort array ( i.e. from ida onwards) and no need to do the last row! FOR idv = ida TO ME.Rows.Count - 1 IF IIf(numeric, narray[ida], sarray[ida]) = ME[idv, col].Text ' have we found the row? IF ida <> idv ' is it in the wrong place? FOR idx = 0 TO ME.Columns.Count - 1 ' then swap it SWAP ME[idv, idx].Text, ME[ida, idx].Text NEXT ENDIF BREAK ' and stop looking for it ENDIF NEXT ' inc idv - haven't found it so keep looking NEXT ' inc ida - loop back for the next sorted row END ------------------------------------------------------------------------------ vRanger cuts backup time in half-while increasing security. With the market-leading solution for virtual backup and recovery, you get blazing-fast, flexible, and affordable data protection. Download your free trial now. http://p.sf.net/sfu/quest-d2dcopy1 _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user