Ich habe eine sortierte Array von etwa 500.000 Ints. Zur Zeit wähle ich den korrekten Index aus, indem ich die Unterschiede zwischen meinem Ziel int und allen Elementen nehme und dann mit LINQ (sehr ineffizient) nach der minimalen Differenz sortiere.Finden Sie den nächsten Index durch den Unterschied mit BinarySearch
Ich möchte in der Lage sein, etwas sehr ähnliches mit BinarySearch zu tun.
Gegeben:
Pos Value
0 10
1 20
2 30
4 50
5 60
Wenn ich will, für Wert 24, um den nächsten Wert finden ich den Index möchte zurück 1.
gegeben werden:
int index = myArray.BinarySearch(values, 24);
if (index < 0)
index = ~index;
Dieser Wert 2 da es das nächste Element in der Zeile statt dem nächsten gibt. Ist es möglich, einen IComparer zu schreiben, der den nächsten Index zurückgibt?
Gegebene Werte:
Value ExpectedReturn
20 1
24 1
25 2
26 2
30 2
Ich versuche, diese so schnell wie möglich zu machen. Alles, was ich bisher in LINQ getan habe, war dem, was ich mit einer gut gemachten binären Suche erreichen kann, unterlegen. Danke für die Eingabe.
@ Jon Skeet: +1, aber die Antwort wird nicht kompilieren, fehlende Klammer nach Smiley fehlt. – RedFilter
How to tun "Sie dann finden, wo es würde eingefügt werden" effizient, kann es erfordern Suche ganzes Array – TalentTuner
@Saurabh: Nein, das ist genau das, was "BinarySearch" bereits tut - es gibt den Index, wo der Wert gefunden wird, wenn es schon da ist , oder '~ InsertionPoint 'andernfalls. –