|
Сделать все элементы массива уникальными
Есть массив с 10 элементами, содержащими числа от 0 до 20. Надо сделать так, чтобы не было одинаковых элементов, чтобы они заменились на любое другое число (от 0 до 20). Ума не приложу, как это сделать.
Готовый код не нужен, просто подкиньте алгоритм, как это всё организовать. |
Код:
WhoIs = {} |
а если сразу формировать массив с уникальными элементами ? чтоб его потом не проверять на повторы
|
рони, тогда массив станет меньше. А если добавить в него рандомное число, оно может совпасть с каким-нибудь оставшимся в массиве числом.
micscr, а причём тут хэш? |
Цитата:
|
Цитата:
|
-------------
Есть вариант — напустить на массив array_unique, потом, пока массив не примет прежний размер, добавлять в него рандомные числа, предварительно проверяя, не нахоятся ли они уже внутри него. Но порядок чисел должен сохраняться, поэтому это не подходит. |
Цитата:
|
функция формирования массива с уникальными данными с заданной длиной и диапазоном
<script language="JavaScript" type="text/javascript"> function random(min,max,l) {var arr = [],m = [],n = 0; if (max - min < l-1) return; for (var i=0; i<=(max-min); i++)m[i] = i + min; for (var i=0; i<l; i++) {n = Math.floor(Math.random()*(m.length)); arr[i]=m.splice(n,1)[0];}; return arr } document.write(JSON.stringify(random(0,20,10))) </script> |
вариант отлова на скорую руку
<script language="JavaScript" type="text/javascript"> function usefloor(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } var m = [], s = [], t = []; var l = 10; //длина массива var min = 0; var max = 20; //создание массива m с неуникальными элементами for (var i = 0; i < l; i++) { m[i] = usefloor(min, max) } var test="<br>" + m; //создание массива t из оставшихся элементов на случай замены for (var i = 0; i <= (max - min); i++) { s[i] = 1; } for (var i = 0; i < l; i++) { s[m[i]] = 0; } for (var i = 0; i < s.length; i++) { if (s[i] == 1) t.push(i) } test+="<br>" + t; //проверка m на уникальность и замена повторяющихся элементов for (var i = 0; i < l; i++) { for (var k = i + 1; k < l; k++) { if (m[k] == m[i]) { n = usefloor(0, (t.length - 1)); m[k] = "<font color='#FF0000'>" + t[n] + "</font>"; t.splice(n, 1); } } } document.write(test+"<br>" + m); </script> |
Часовой пояс GMT +3, время: 08:56. |
|