减少市场序列构建克隆
This commit is contained in:
@@ -535,8 +535,11 @@ struct SymbolPriceSeries {
|
||||
}
|
||||
|
||||
impl SymbolPriceSeries {
|
||||
fn new(symbol: String, rows: &[DailyMarketSnapshot]) -> Self {
|
||||
let mut sorted = rows.iter().collect::<Vec<_>>();
|
||||
fn new<'a, I>(symbol: String, rows: I) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = &'a DailyMarketSnapshot>,
|
||||
{
|
||||
let mut sorted = rows.into_iter().collect::<Vec<_>>();
|
||||
sorted.sort_by_key(|row| row.date);
|
||||
|
||||
let dates = sorted.iter().map(|row| row.date).collect::<Vec<_>>();
|
||||
@@ -3577,20 +3580,17 @@ mod optional_date_format {
|
||||
fn build_market_series(
|
||||
market_by_date: &BTreeMap<NaiveDate, Vec<DailyMarketSnapshot>>,
|
||||
) -> 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 row in rows {
|
||||
grouped
|
||||
.entry(row.symbol.clone())
|
||||
.or_default()
|
||||
.push(row.clone());
|
||||
grouped.entry(row.symbol.clone()).or_default().push(row);
|
||||
}
|
||||
}
|
||||
|
||||
grouped
|
||||
.into_iter()
|
||||
.map(|(symbol, rows)| {
|
||||
let series = SymbolPriceSeries::new(symbol.clone(), &rows);
|
||||
let series = SymbolPriceSeries::new(symbol.clone(), rows);
|
||||
(symbol, series)
|
||||
})
|
||||
.collect()
|
||||
|
||||
Reference in New Issue
Block a user