DBUnit + Spring + Hibernate: org.dbunit.dataset.NoSuchTableException: информационный бюллетень

Извините, это новый ответ на старый вопрос, но это можно сделать более эффективно с помощью карты. То, что вам нужно, это случайный выбор, а не случайный случай. Не повторяющийся случайный случай является бессмысленным.

Где _a - это коллекция, а r не является частью коллекции, мы получаем случайное значение r:

function aRandom(f){
  var r = Math.random();
  aRandom._a[r] ? aRandom(f) : f(r,aRandom._a[r] = 1);
}
aRandom._a = {};

//usage:
aRandom(function(r){ console.log(r) });

Redefine aRandom._a когда браузер становится вялым. Чтобы избежать возможной медлительности, нужно действительно использовать алгоритм генерации UUID с достаточной энтропией, чтобы шансы на повторение были фактически нулевыми, а не грубыми, вытесняющими дифференцируемость. Я выбрал имя функции aRandom, потому что латинский префикс A означает «отсюда». Так как чем больше он используется, тем дальше от случайного выхода. Функция генерирует миллион уникальных значений в 2100 мс на Macbook.

Преимущество вышеупомянутого решения не нужно ограничивать набор. Кроме того, несколько абонентов могут использовать его одновременно и предположить, что их значения отличаются от всех других абонентов. Это удобно для таких вещей, как шумоподавляющие распределения с застрахованным без перекрытий.

Однако его можно модифицировать так, чтобы возвращать целые числа, чтобы ограничить использование плунжера до указанной длины:

function aRandom(f,c){
  var r = Math.floor(Math.random()*c);
  aRandom._a[r] ? aRandom(f,c) : f(r,aRandom._a[r] = 1);
}
aRandom._a = {};


//usage:
var len = 10;
var resultset = [];
for(var i =0; i< len; i++){
  aRandom(function(r){ resultset.push(r); }, len);
}
console.log(resultset);
0
задан Morten Jensen 26 February 2015 в 10:49
поделиться