батчить get операцию, т. к. ключи отсортированы по дереву. Как мне взять, допустим, все элементы с префиксом XYZ?
Чтобы иметь возможность перебирать ключи по порядку и запрашивать сразу некоторый их диапазон. Вдобавок, очень маленькие BTreeMap могут работать быстрее HashMap, особенно с дефолтным хешером. Если эти возможности тебе не требуются, то используй HashMap и не парься
Что значит "по порядку"? В HashMap#iter не "по порядку"? Или имеется в виду тот порядок, в котором они были добавлены?
Итератор по HashMap выдаёт элементы в каком-то порядке. Каком именно — не фиксируется
А одинаковый хэш всё также заменяет значение, да?
На вид звучит как https://doc.rust-lang.org/stable/alloc/collections/btree_map/struct.BTreeMap.html#method.range
Тут наверное правильнее было сказать: в порядке добавления. Например в python есть гарантия, что порядок добавления = порядку итерации. В Rust такого нету
Не то. Кажется, мне всё же нужно что-то типа trie map
а чем не устраивает? Я вижу только проблему, что тут диапазон не очень удобно подбирать, типа XYZ..XY(Z+1)
Мне по префиксу искать нужно. XYZ это типа sample text)
ну да, и такой range() как раз вернет все записи с таким префиксом у ключа
Знал бы я диапазон хотя бы, можно было бы найти первый ключ и взять n после него. Мне же нужно найти все значения с "prefix_"
Смотря как критерий сортировки задан. Для строк действительно лучше другие структуры данных, но если лексикографический порядок задан, то range берётся от XYZ до XZ, кажется
Префиксное дерево, или как-то так
можно прочитать первую строку документации) B-Trees represent a fundamental compromise between cache-efficiency and actually minimizing the amount of work performed in a search
Я бы уточнил что в питоне это добавили в какой-то там 3.x версии
да маппинги раньше не гарантировали последовательность
Обсуждают сегодня