Я создаю гибридное приложение в Javascript, которое случайно выбирает упражнение из базы данных, дожидаясь, когда пользователь его разрешит, а затем выберите другое упражнение.Выбирайте всегда другое число в диапазоне 3K номеров
Ничего сложного на данный момент, моя проблема заключается в том, что вы выбираете всегда разные упражнения из базы данных.
Теперь мой код 'работает' таким образом:
- Возвращает общее количество упражнений (около 3K),
- Генерировать N случайное число от 1 до 3000,
- выбрать N упражнения из БД,
- Сохранить N номер в «использовать» таблицы БД,
- Сформировать другое имя номер,
- На этот раз в первую очередь проверьте, если сгенерированный номер уже был использован,
- Если НЕТ выбор упражнений, если ДА создать другой номер,
- и т.д ...
Код хорошо работает для первые 2000-2500 номеров, а затем начинают очень медленно, потому что создание случайного числа, которое еще не используется, начинает очень сложно. Когда используемое число всего лишь немного меньше 3K, код полностью сломан: продолжает проверяться, но новый номер никогда не приходит
Как я могу справиться с этой ситуацией быстрым и легким способом, который использует память как можно меньше?
Большое спасибо!
EDIT
Я использую WebSQL в приложении PhoneGap
Вот что я делаю (код):
Здесь я получаю количество упражнений
1. SELECT COUNT(*) AS countArt FROM Exercises'
Здесь я выбираю случайное число от 1 до totalNumberOfExercises
2. randomNumber = random(totalNumberOfExercises);
function numeroCasuale(len){
var num = Math.floor(Math.random() * len) + 0;
return num;
};
Здесь я проверить, если мой randomNumber уже в БД, это означает, что уже используется
4. SELECT EXISTS(SELECT * FROM alreadyUsed WHERE numero=randomNumber)
Если randomNumber существует я создать еще randomNumber и проверить его снова и снова ...
Его лучше создать массив из всех возможных 3000 номеров, а затем удалить уже использованные, а затем получить случайное число из оставшихся неиспользуемых номеров. – juvian
Поместить числа от 1 до 3000 в массив, а затем перетасовать массив , Затем вы можете просто выбирать числа, увеличивая индекс в массиве, и вам гарантировано не получить дубликат. – Pointy
Как вы генерируете это случайное число (SQL или приложение)? Какую базу данных вы используете? Можете ли вы опубликовать код? –