Filter löschen
Filter löschen

create random-order list with items not repeating within 8 occurences

4 Ansichten (letzte 30 Tage)
Darya Frank
Darya Frank am 4 Apr. 2016
Beantwortet: Dave Behera am 6 Apr. 2016
I'm quite new to Matlab and any help/ideas would be much appreciated! I have a list of 240 strings in a cell that look like:
1a b
1a f
1b f
1b b
1c f
1c b
1d f
1d b
2a b
2a f
etc. until 30d...
I'm trying to re-order this list such that there's at least 8 occurrences between 1X (x=a,b,c,d) and any other 1X, with each occurring only once.
For example:
Does anyone have any idea where to start? I've tried using randperm and a custom-built randswap functions but I can't seem to figure out how to make it fulfil the min-8 occurrences condition
Many thanks!

Antworten (1)

Dave Behera
Dave Behera am 6 Apr. 2016
You could use this approach:
1. Create a empty cell array A
A = {}
2. Go through the list looking for 1_x strings (using for loop). Every time one is found, create a new cell array beginning with that string. Add this new cell array to the array A. In the end, A should look like: { {1_a}, {1_b},.....}
3. Go through the list again, this time looking for non- 1_x strings. Add each such string to a different cell array in A, so that each cell array for a 1_x string gets populated. One way would be to add the 1st string to A{1}, .ie {1_a} in example above, 2nd string to {1_b}, etc. When end of A is reached, add the string to A{1} again and repeat.
In the end, A should look like:
{ {1_a, 5_d, 6_c.....}, {1_b, 7_g,......},.....}
4. Then, concatenate all the cell arrays inside A into a single cell array, which will be the final answer.


Mehr zu Characters and Strings finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by