У меня есть исходные файлы, содержащие текстовые CSV-строки для многих продуктов за определенный день. Я хочу использовать Rust для сопоставления этих файлов, чтобы в итоге у меня было много новых целевых CSV-файлов, по одному для каждого продукта, каждый из которых содержит части строк, характерные только для этого продукта.
Мое текущее решение состоит в том, чтобы перебирать строки исходных файлов и использовать HashMap<String, String>
для сбора строк для каждого продукта. Я разделяю каждую исходную строку и использую элемент, содержащий идентификатор продукта, в качестве ключа, чтобы получить Entry
(занято или свободно) в моем HashMap
. Если он свободен, я инициализирую значение новым String
, который выделяется заранее с заданной емкостью, чтобы впоследствии я мог эффективно добавлять к нему.
// so far, so good (the first CSV item is the product ID)
let mystringval = productmap.entry(splitsource[0].to_owned()).or_insert(String::with_capacity(SOME_CAPACITY));
Затем я хочу добавить отформатированные элементы той же исходной строки к этому Entry
. В Интернете есть много примеров, например
https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.entry
как заставить это работать, если значение HashMap
является целым числом:
// this works if you obtain an Entry from a HashMap containing int vals
*myval += 1;
Я не понял, как добавить больше текста к Entry
, который я получаю от своего HashMap<String, String>
, используя такой синтаксис, и я сделал все возможное, чтобы найти примеры в Интернете. На удивление мало примеров манипулирования нечисловыми записями в структурах данных Rust.
// using the Entry obtained from my first code snippet above
*mystringval.push_str(sourcePortion.as_str());
При попытке скомпилировать выдает следующую ошибку:
error: type `()` cannot be dereferenced
--> coll.rs:102:17
|
102 | *mystringval.push_str(sourcePortion.as_str());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Как я могу добавить String
внутри значения Entry
?