减少市场序列构建克隆

This commit is contained in:
boris
2026-06-21 02:06:28 +08:00
parent d0ab59669f
commit c409d500b3
+8 -8
View File
@@ -535,8 +535,11 @@ struct SymbolPriceSeries {
} }
impl SymbolPriceSeries { impl SymbolPriceSeries {
fn new(symbol: String, rows: &[DailyMarketSnapshot]) -> Self { fn new<'a, I>(symbol: String, rows: I) -> Self
let mut sorted = rows.iter().collect::<Vec<_>>(); where
I: IntoIterator<Item = &'a DailyMarketSnapshot>,
{
let mut sorted = rows.into_iter().collect::<Vec<_>>();
sorted.sort_by_key(|row| row.date); sorted.sort_by_key(|row| row.date);
let dates = sorted.iter().map(|row| row.date).collect::<Vec<_>>(); let dates = sorted.iter().map(|row| row.date).collect::<Vec<_>>();
@@ -3577,20 +3580,17 @@ mod optional_date_format {
fn build_market_series( fn build_market_series(
market_by_date: &BTreeMap<NaiveDate, Vec<DailyMarketSnapshot>>, market_by_date: &BTreeMap<NaiveDate, Vec<DailyMarketSnapshot>>,
) -> HashMap<String, SymbolPriceSeries> { ) -> HashMap<String, SymbolPriceSeries> {
let mut grouped = HashMap::<String, Vec<DailyMarketSnapshot>>::new(); let mut grouped = HashMap::<String, Vec<&DailyMarketSnapshot>>::new();
for rows in market_by_date.values() { for rows in market_by_date.values() {
for row in rows { for row in rows {
grouped grouped.entry(row.symbol.clone()).or_default().push(row);
.entry(row.symbol.clone())
.or_default()
.push(row.clone());
} }
} }
grouped grouped
.into_iter() .into_iter()
.map(|(symbol, rows)| { .map(|(symbol, rows)| {
let series = SymbolPriceSeries::new(symbol.clone(), &rows); let series = SymbolPriceSeries::new(symbol.clone(), rows);
(symbol, series) (symbol, series)
}) })
.collect() .collect()