跳过已排序快照的重复排序
This commit is contained in:
@@ -1386,7 +1386,12 @@ impl DataSet {
|
|||||||
mut bundles: Vec<DailySnapshotBundle>,
|
mut bundles: Vec<DailySnapshotBundle>,
|
||||||
execution_quotes: Vec<IntradayExecutionQuote>,
|
execution_quotes: Vec<IntradayExecutionQuote>,
|
||||||
) -> Result<Self, DataSetError> {
|
) -> Result<Self, DataSetError> {
|
||||||
bundles.sort_by_key(|bundle| bundle.date);
|
if !bundles
|
||||||
|
.windows(2)
|
||||||
|
.all(|window| window[0].date <= window[1].date)
|
||||||
|
{
|
||||||
|
bundles.sort_by_key(|bundle| bundle.date);
|
||||||
|
}
|
||||||
if let Some(pair) = bundles.windows(2).find(|pair| pair[0].date == pair[1].date) {
|
if let Some(pair) = bundles.windows(2).find(|pair| pair[0].date == pair[1].date) {
|
||||||
return Err(DataSetError::DuplicateDailyBundle { date: pair[1].date });
|
return Err(DataSetError::DuplicateDailyBundle { date: pair[1].date });
|
||||||
}
|
}
|
||||||
@@ -1435,14 +1440,10 @@ impl DataSet {
|
|||||||
|row| row.date,
|
|row| row.date,
|
||||||
|row| row.symbol.as_str(),
|
|row| row.symbol.as_str(),
|
||||||
)?;
|
)?;
|
||||||
bundle.market.sort_by(|left, right| left.symbol.cmp(&right.symbol));
|
sort_rows_by_symbol_if_needed(&mut bundle.market, |row| row.symbol.as_str());
|
||||||
bundle.factors = normalize_factor_snapshots(bundle.factors);
|
bundle.factors = normalize_factor_snapshots(bundle.factors);
|
||||||
bundle
|
sort_rows_by_symbol_if_needed(&mut bundle.factors, |row| row.symbol.as_str());
|
||||||
.factors
|
sort_rows_by_symbol_if_needed(&mut bundle.candidates, |row| row.symbol.as_str());
|
||||||
.sort_by(|left, right| left.symbol.cmp(&right.symbol));
|
|
||||||
bundle
|
|
||||||
.candidates
|
|
||||||
.sort_by(|left, right| left.symbol.cmp(&right.symbol));
|
|
||||||
if !bundle.market.is_empty() {
|
if !bundle.market.is_empty() {
|
||||||
grouped.market_by_date.insert(date, bundle.market);
|
grouped.market_by_date.insert(date, bundle.market);
|
||||||
}
|
}
|
||||||
@@ -3844,6 +3845,18 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn sort_rows_by_symbol_if_needed<T, F>(rows: &mut Vec<T>, symbol_of: F)
|
||||||
|
where
|
||||||
|
F: Fn(&T) -> &str + Copy,
|
||||||
|
{
|
||||||
|
if !rows
|
||||||
|
.windows(2)
|
||||||
|
.all(|window| symbol_of(&window[0]) <= symbol_of(&window[1]))
|
||||||
|
{
|
||||||
|
rows.sort_by(|left, right| symbol_of(left).cmp(symbol_of(right)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn build_symbol_id_index(
|
fn build_symbol_id_index(
|
||||||
instruments: &HashMap<String, Instrument>,
|
instruments: &HashMap<String, Instrument>,
|
||||||
market_by_date: &BTreeMap<NaiveDate, Vec<DailyMarketSnapshot>>,
|
market_by_date: &BTreeMap<NaiveDate, Vec<DailyMarketSnapshot>>,
|
||||||
|
|||||||
Reference in New Issue
Block a user