I'm still not familiar with data structure and pointers in pd, but I think I'll use your suggestion as a starting point. Thanks! BEnoît
De : Frank Barknecht fbar@footils.org À : pd-list@iem.at Envoyé le : samedi 17 mars 2012 11h49 Objet : Re: [PD] Re : store and manipulate multiple lists
Hi,
On Thu, Mar 15, 2012 at 11:39:51AM +0000, Andy Farnell wrote:
Yes of course. Once you can sort items of any type you can sort aggregate items, structs, sublists or whatever on one of their elements. Its a little messy in Pd. The best way might be to use pointers and try to do the classic Kernighan and Richie head swap thing but I have no idea how to exchange pointers in Pd.
Sorting lists of numbers by their first element is pretty easy to do with Pd's data structures/pointers. I don't have Pd at hand now to patch an example (maybe Monday), but basically you first define a data structure with one "float x" field and one with an array of these float-items in addition to its own float x.
[pd $0-f]: structure with one float item: [struct $0-f float x]
[pd $0-record]: structure with an x-float for sorting and the array "data" to hold all the list items: [struct $0-record float x array data $0-f]
Then you create the structured data from the lists and write them to a subpatch as usual with data structures. The first element in an incoming lists doubles as "x" position, the array holds the rest of the list.
[r one-list]
|
[t a a a]
| | |
| | [list split 1]
| | | ... traverse subpatch blabla
| | [append $0-record x]
| | |
| | [s $0-current-pointer]
| |
| [list length] [r $0-current-pointer]
| | |
| [setsize $0-record data]
|
[list-enumerate] <- list-drip with index numbers, i.e. "list a b" -> "0 a, 1 b"
|
[swap] [r $0-current-pointer]
| \ |
[element $0-record data]
|
[set $0-f x]
Then sorting is just a message "sort" to the subpatch receiver, afterwards dump the lists again using basically the opposite from above. You're only interested in the "data" array now.
Frank
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list