Допустим, у меня есть &mut std::collections::HashMap
, и я хочу перевести все клавиши в верхний регистр. Следующий код делает свое дело:
use std::collections::HashMap;
fn keys_to_upper<T>(map: &mut HashMap<String, T>) {
let mut tmp = Vec::with_capacity(map.len());
for (key, val) in map.drain() {
tmp.push((key.to_ascii_uppercase(), val));
}
for (key, val) in tmp {
map.insert(key, val);
}
}
К сожалению, у меня нет HashMap
, но есть &mut serde_json::Map
, и я хочу чтобы перевести все клавиши в верхний регистр. Нет .drain()
метода. Вместо этого я мог бы использовать .into_iter()
, но это дало бы мне только изменяемые ссылки на ключи и значения. Чтобы снова вставить их в карту, мне пришлось бы их клонировать, что снизило бы производительность.
Есть ли здесь способ обойти отсутствие метода .drain()
?