в ракетке, как я могу выбрать место в хэш-таблице, основанной на номере? как у меня есть хеш-таблица, и я хочу случайным образом выбирать вещи из него, поэтому я собираюсь использовать размер хэш-таблицы случайным образом, чтобы выбрать число в этом диапазоне, чтобы выбрать запись в хеш-таблице.Выбор места в хэш-таблице RACKET
0
A
ответ
0
(random n)
Возвращает целое число в диапазоне от 0 до n-1. Таким образом, вы можете сделать следующее
(define ht (hash 0 'red 1 'yellow 2 'blue))
(hash-ref ht (random 3))
Но вы должны быть осторожны, следующий пример может потерпеть неудачу.
(define ht2 (hash 0 'red 1 'yellow 3 'blue))
(hash-ref ht2 (random 4))
0
Вы не можете использовать хеш-таблицу напрямую, вам нужно использовать структуру, которая индексируется последовательными целыми числами.
В зависимости от вашей хэш-таблицы, нужно ли сохранить оригинальные ключи в результате, и ваше исполнение потребностей вы можете использовать либо hash-keys
, hash-values
, hash->list
или вы можете создать новый хэш заменяющий все ключи с последовательными целыми числами:
Примеры:
хэш-ключи
(define (take-hash-random1 h n)
(let* ((keys (hash-keys h)) (len (length keys)))
(for/list ((i (in-range n)))
(hash-ref h (list-ref keys (random len))))))
(take-hash-random1 ht 5)
=> '(yellow yellow red yellow yellow)
хэш-значения
(define (take-hash-random2 h n)
(let* ((vals (hash-values h)) (len (length vals)))
(for/list ((i (in-range n)))
(list-ref vals (random len)))))
hash-> Список
(define (take-hash-random3 h n)
(let* ((lst (hash->list h)) (len (length lst)))
(for/list ((i (in-range n)))
(cdr (list-ref lst (random len))))))
новый хэш-таблица
(define (take-hash-random4 h n)
(let* ((vals (hash-values h))
(len (length vals))
(newh (make-hash (map cons (range len) vals))))
(for/list ((i (in-range n)))
(hash-ref newh (random len)))))
Смежные вопросы
- 1. Выбор меню RACKET
- 2. Выбор места в GA?
- 3. Выбор языка студента в исходном коде Racket
- 4. Racket - выбор случайного элемента из списка
- 5. Выбор места для размещения валидации?
- 6. Как реализовать выбор места в андроиде?
- 7. Выбор места для установки проекта Django
- 8. Выбор списков данных и определение их места
- 9. Пример кода racket racket/gui classes
- 10. Переупорядочивание потоков в Racket
- 11. Пересечение списков в racket
- 12. Кривая дракона в Racket
- 13. Решение головоломки в Racket
- 14. Усеченные строки в Racket
- 15. Код Racket в R
- 16. Использование структуры в Racket
- 17. Если утверждения в Racket
- 18. Уменьшить функцию в Racket?
- 19. «выберите» в Racket
- 20. Потребление памяти в Racket
- 21. Racket: Запись в файл
- 22. Приоритеты параллелизма в Racket
- 23. Регулярное выражение в Racket
- 24. Макроопределяющий макрос в Racket?
- 25. Передача параметров в Racket
- 26. Как петля в Racket?
- 27. `suffix-out` в Racket
- 28. Случайное дерево в Racket
- 29. Циркулярные списки в Racket
- 30. Случайная функция в Racket