我有這個
Dictionary<(DateTime from, DateTime to), HashSet<string>> uniquelyChangedPeriods = new();
我在其中存盤給定時間段內的唯一字串
所以例如
之間(從:2020-01-01T00:00:00Z,到:2022-01-01T00:00:00Z)我可以存盤諸如 {"Hi","Adress","Something"} 之類的字串可以說我想要添加在 (2020-01-01T00:00:00Z, 2021-01-01T00:00:00Z) {"Hi","Adress", "Something2"} 中注冊的更改
但由于 (2020-01-01T00:00:00Z,2021-01-01T00:00:00Z) 包含在 (from: 2020-01-01T00:00:00Z , to:2022-01-01T00:00:00Z ),我想在條目中包含“Something2”(從:2020-01-01T00:00:00Z,到:2022-01-01T00:00:00Z),而不是為此在字典中創建單獨的條目。 .. 如何輕松地進行這種重疊檢查,并確保它包含在重疊時間范圍內?
uj5u.com熱心網友回復:
這是您可以解決的一種方法:
Dictionary<(DateTime from, DateTime to), HashSet<string>> uniquelyChangedPeriods = new();
var ((from, to), addData) = ((new DateTime(2020, 1, 1), new DateTime(2021, 1, 1)), new[]{ "test" });
var existing = uniquelyChangedPeriods.FirstOrDefault(x => x.Key.from <= from && x.Key.to >= to);
if (existing.Value != null)
{
foreach (var a in addData) existing.Value.Add(a);
}
else
{
var set = new HashSet<string>();
foreach (var a in addData) set.Add(a);
uniquelyChangedPeriods.Add((from, to), set);
}
但是,您可能需要在此處重新考慮您的設計和方法。以這種方式使用字典是可行的,但可能很難堅持下去。
編輯:
例如,當前的方法沒有考慮新時期完全或部分與現有時期重疊并跨越現有時期邊界的潛在情況。為了更好地處理這種情況,您可能希望創建一個包含資料的類,該類具有 start 和 end 作為屬性;然后,您可以隨意更改條目的開頭和結尾(即展開它們)。List<> 可以保存現有的條目。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/373947.html
