On Thu, 8 Sep 2011, tim vets wrote:

what's the best way to 'interlace' two lists, i.e. turn:
1 2 3 4 and 5 6 7 8
into
1 5 2 6 3 7 4 8
?

It's usually called interleaving.

If they are all floats, the fastest is something like this :

[list prepend 1 4 f #]
 |
[#join 0]---------------[list prepend 1 4 f #]
 |
[#transpose]
 |
[#to_l]

where the 1 4 f # prefix means you want to make a grid of 1 row and 4 columns of floats. Then in contact with grid-inlets, those prefixed lists become grids of 1 by 4.

[#join] joins them by the dimension 0, which makes a single grid of (1+1=2) rows by 4 columns.

[transpose] swaps the first two dimensions, which makes a grid of 4 rows by 2 columns.

[#to_l] makes a list of 8 elements, row after row.

Of course you can instead use a [list append] and messagebox containing :

  $1 $5 $2 $6 $3 $7 $4 $8

and in that particular case, it's more efficient, but the GridFlow solution works for any list length, and is probably more efficient for big lists...

 _______________________________________________________________________
| Mathieu Bouchard ---- tél: +1.514.383.3801 ---- Villeray, Montréal, QC
_______________________________________________
Pd-list@iem.at mailing list
UNSUBSCRIBE and account-management -> 
http://lists.puredata.info/listinfo/pd-list

Reply via email to