У меня есть пул слов (около 200 сейчас), которые я хочу отображать случайным образом каждый день без повторения.Получайте уникальное случайное слово из пула каждый день
В общем случае я сохраняю дату последнего отображаемого слова, и если сегодняшняя дата такая же, я показываю то же самое слово, которое было отображено в последний раз, это сегодня другой день, когда мне нужно получить еще одно случайное слово из пула и отобразите его.
Я пытался добиться этого с помощью двух методов:
Метод 1: Использование БД SQLite
- Предварительно заполнить БД в папке активов (БД содержит таблицу с двумя столбцами, слова и isUsed)
- на OnCreate (база данных SQLiteDatabase) копия предварительно заполненную БД в/данные
- использовать SQLite, чтобы получить случайную запись из БД и обновлять его isUsed противоионы к истинному
- бритье это слово в ш ared предпочтение так, что если пользователь открывает приложение снова в тот же день, а затем показать это слово
- Если я обновить слова в БД, то (по 150):
- создать другой БД в активы папку с новыми словами
- onUpgrade (SQLiteDatabase дБ, Int oldVersion, Int newVersion) скопировать этот дБ/данные
- копии каждого слова в исходной БД строка за строкой сохраняя isUsed столбец интактный
Вместо использования пр e db Я могу вставить 200 слов, используя инструкцию SQL в oncreate, а затем обновить остальные 150 с помощью операторов sql в onUpgrade.
Метод 2: Использование общих предпочтений
- использовать для сохранения 200 слов
- Создать строку случайных чисел Шифрования до 200 и сохранить его в общем предпочтении
- поп один случайный номер каждый день и показать слово с этим индексом. Если это тот же самый день, то не поп, но показывать последнее слово
- Если я обновить слова (от 150):
- проверить, сколько слова числа увеличилось и генерировать это увеличение числа в в случайном порядок и перемешайте его обратно к исходному случайному строковому массиву
Так что мой вопрос я чувствую, никто из этого не является алгоритм достаточно хорошо. Есть ли лучший способ достичь этого, и если нет, то я должен идти с методом 1, методом 1, но без предварительно заполненного db или метода 2?
Это звучит наилучшим образом для меня. Я могу использовать orderby random где isUsed = 0; sqlite stmt для случайного слова. – amol
Что делать, если приложение не используется в один прекрасный день? Слово не используется, но оно все еще недоступно. – kevinsa5
Затем просто увеличивайте N вручную, когда пользователю будет показано следующее слово :-) – kriomant