Eine Lösung ist die folgende:
long nowTimestamp = <compute now timestamp>;
long delta = 30 * 24 * 60 * 60 * 1000; // ms
var result = myModel.Where(item => nowTimestamp - item.CreationTimeInMs > delta);
Doch dieser Ansatz eine lineare Komplexität (O (list_length)) und verwendet nicht die Tatsache, dass es sortiert wird.
Wenn die Liste sortiert ist absteigend können Sie nur eine andere Liste aufzubauen, solange aktuellen Zeitstempel ist neu genug:
var recentList = new List<FooModel>();
foreach (var item in myModel)
{
if (nowTimestamp - item.CreationTimeInMs > delta)
break;
recentList.Add(item);
}
Dies ist der schnellste Ansatz, erfordert aber die Liste in absteigender Weise bestellt werden .
Wenn die Liste in aufsteigender Reihenfolge angezeigt wird, müssen Sie zuerst das Element finden, das als letztes eingefügt werden soll. Wie bereits erwähnt, ist der schnellste Weg ein binärer Suchansatz, wie in this question angegeben.
Verwendung bereitgestellt Index können Sie alle folgenden Elemente erhalten:
int indexOfFirstElement = myModel.BinarySearchForMatch(item => item.CreationTimeInMs > nowTimestamp - delta);
var recentList = new List<FooModel>();
for (int i = indexOfFirstElement; i < myModel.Count; i ++)
{
recentList.Add(myModel[i]);
}
Binary Suche dauert O (log (list_size)) und Liste Konstruktion ist O (result_size).
zu verarbeiten Irgendein Grund wird dies als eine Zeichenfolge gespeichert? –
@TahTatsumoto, Es wird als Ganzzahl von einer 3rd Party API zurückgegeben – Alon