减少市场序列构建克隆
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user