18. februar 2008 - 19:02Der er
15 kommentarer og 2 løsninger
Binary Search
Hej
Jeg har en værdi jeg taster ind i et tekstfelt, og så bruger jeg BinarySearch til at finde index'et i et array ud fra det indtastede i tekstfeltet.
Arrayet ser sådan ud 60,80,100,120,140
Det mærkelige er, at hvis jeg taster 100, 120, 140, så finder den fint værdien, mens jeg ved alt under 100 skal påføre et ekstra 0 foran for at jeg ikke for en IndexOutOfBounds-exception
Hej Arne, jeg ved ikke om jeg må poste koden her for kunden, så jeg tror jeg undlader (better safe than sorry :))
Men jeg kan godt skrive i generelle vendinger. Jeg glemte vist at skrive at det var en ArrayList værdierne lå i, og så opdagede jeg at værdierne ligger som strings, men bliver konverterede til ints senere. Gør det nogen forskel?
Jeg har prøvet at konvertere værdierne til ints og så får jeg en "Cannot compare two elements in the array"-fejl. Skyldes det at jeg skal implementere IComparer, eller er det ligegyldigt?
Det er .NET 2.0 jeg bruger, men har brugt arraylists selvom jeg godt ved det er helligbrøde.
jeg fandt flg. VB-kode som jeg har konverteret til C#, men det fungerer ikke efter hensigten.
public class CompareInts : IComparer { int System.Collections.IComparer.Compare(object x, object y) { if (x is int) { if (y is int) { int value1 = (int)x; int value2 = (int)y; return value1.CompareTo(value2); } else { return -1; } } else if (y is int) { return 1; } else { return x.ToString().CompareTo(y.ToString()); } } } Det returnerer blot ArrayListens størrelse. Hvilket må tyde på der er noget der fejler.
Alternativt - men også lidt grimt - kan du jo vælge at BinarySearche efter strengen "60" i stedet for integer værdien 60.... Det er vel alligvel en tekststreng du får ind fra tekstboxen...
Yes, det virker! Lidt en dummepeter-fejl, jeg havde glemt at tjekke inputtet fra mine tekstfelter, og konvertere til ints.. sådan går det, når man koder til langt ud på natten..
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.