Der folgende Code vergleicht zwei Listen, die in absteigender Reihenfolge sortiert sind, um die entfernten Einträge zu finden.Kann ich den folgenden Code mit LINQ neu schreiben?
fullorderbook.asks
ist die vorherige Liste der Aufträge, die die entfernten Aufträge enthalten können.
orderbook.asks
ist die aktuelle Liste der Aufträge, die den aktuellen Status enthält.
Also schleift der Algorithmus einfach auf fullorderbook.asks
und vergleicht den Preis mit dem entsprechenden Bestellpreis in orderbook.asks
, um herauszufinden, ob es bereits existiert oder gelöscht oder einfach nach unten verschoben wurde.
Meine Frage ist, wie kann ich den Code mit LINQ umschreiben?
for (int i = 1; i <= fulllength; i++)
{
withinrange = false;
//for each level in the ask book check if the price still
//exists or it is deleted or just shift down
while (askindex <= asklength)
{
//removed ask
if (orderbook.asks[askindex].price > fullorderbook.asks[i].price)
{
changes.Add(new CapturedLevel(i, fullorderbook.asks[i].price, -1 * fullorderbook.asks[i].volume));
withinrange = true;
break;
}
else if (orderbook.asks[askindex].price < fullorderbook.asks[i].price)
{
//update the ask pointer
askindex++;
}
else
{
withinrange = true;
askindex++;
break;
}
}
if (!withinrange)
{
//removed ask
if (askindex >= asklength && asklength < OBK_SIZE)
{
changes.Add(new CapturedLevel(i, fullorderbook.asks[i].price, -1 * fullorderbook.asks[i].volume));
}
else if (askindex >= asklength)
{
shiftedorders.Add(orderbook.asks[i]);
}
}
}
fullorderbook.asks.Clear();
fullorderbook.asks.AddRange(orderbook.asks.ToList<PriceLevel>());
fullorderbook.asks.AddRange(shiftedorders);
P. S:
Ziel des Algorithmus ist es, die vollständig entfernt Aufträge und die nach unten verschoben Aufträge (die Auftragslage als die Größe des Auftragsbuchs größer ist OBK_SIZE
) zu finden.
Also ich die Verwendung der IEnumerable.Except
Erweiterung Methode wird nicht die Lösung geben, da es Unterschied zurückgibt, ohne zu wissen, was die Ursache für diesen Unterschied (Herunterschalten oder Entfernen) ist. Weil, wenn die Reihenfolge nach unten verschoben wird, muss ich es in der fullorderbook.asks
in der richtigen Reihenfolge halten.
vielleicht ist Ihnen ein veröffentlichen können Voll funktionsfähiges Beispiel ... –