Shuffle array elements

I have array of objects

array=[a1,a2,a3...a10]

How I can shuffle array elements by monkey с?
  • You could use Math.rand()%10 to generate indexes, and then swap them.
  • Not that this is difficult to write, but I have code for this at home. I'll post it here tonight.
  • using Toybox.Math as Math
    using Toybox.Test as Test;

    //! shuffles `array' in place using Math.rand()
    function shuffle(array) {
    var n = array.size();
    for (var i = n - 1; 0 < i; --i) {
    var j = Math.rand() % (i + 1);

    var tmp = array;
    array= array[j];
    array[j] = tmp;
    }
    }

    // helper test function
    function do_test_shuffle(logger, a, b)
    {
    shuffle(a);

    var a_size = a.size();
    var b_size = b.size();
    Test.assertEqual(a_size, b_size);

    for (var i = 0; i < a_size; ++i) {
    Test.assertEqual(a, b);
    }
    }

    (:test) function test_shuffle(logger) {

    Math.srand(0xdeadbeef);

    do_test_shuffle(logger, [],
    []);
    do_test_shuffle(logger, [ 1 ],
    [ 1 ]);
    do_test_shuffle(logger, [ 1, 2 ],
    [ 1, 2 ]);
    do_test_shuffle(logger, [ 1, 2, 3 ],
    [ 1, 2, 3 ]);
    do_test_shuffle(logger, [ 1, 2, 3, 4 ],
    [ 4, 3, 2, 1 ]);
    do_test_shuffle(logger, [ 1, 2, 3, 4, 5 ],
    [ 5, 2, 4, 3, 1 ]);
    do_test_shuffle(logger, [ 1, 2, 3, 4, 5 ],
    [ 1, 2, 4, 5, 3 ]);
    do_test_shuffle(logger, [ 1, 2, 3, 4, 5 ],
    [ 3, 2, 1, 5, 4 ]);
    do_test_shuffle(logger, [ 1, 2, 3, 4, 5 ],
    [ 1, 4, 5, 2, 3 ]);

    return true;
    }
    [/code]