Ответ 1
Является ли эта идиоматическая ржавчина?
Нет ничего особенно унидиотического, кроме, возможно, ненужного полного ограничения типа на count_vec
; вы можете просто использовать
let mut count_vec: Vec<_> = count.iter().collect();
Не сложно из контекста выяснить, что такое полный тип count_vec
. Вы также можете полностью опустить ограничение типа для count
, но тогда вам нужно будет сыграть в shenanigans с вашими целыми литералами, чтобы получить правильный тип значения. То есть, в этом случае явная аннотация чрезвычайно разумна.
Другое изменение границы, которое вы могли бы сделать, если вам кажется, что это будет использовать |a, b| a.1.cmp(b.1).reverse()
для закрытия сортировки. Метод Ordering::reverse
просто меняет результат так, что меньше, чем становится больше, чем, и наоборот. Это делает несколько более очевидным, что вы имели в виду то, что вы написали, в отличие от случайного переноса двух букв.
Можно ли построить count_vec таким образом, чтобы он использовал данные HashMaps и владел им?
Не имеет смысла. Просто потому, что HashMap
использует память, это не означает, что память каким-либо образом совместима с Vec
. Вы можете использовать count.into_iter()
, чтобы потреблять HashMap
и перемещать элементы (в отличие от итерации по указателям), но поскольку как char
, так и u32
тривиально можно копировать, это на самом деле ничего не дает вам.