Avatar billede simm Nybegynder
12. februar 2008 - 10:25 Der er 5 kommentarer og
1 løsning

Finde værdi i dataset

Jeg har en række værdier i et dataset, lad os sige 20,40,50,60
En bruger taster et tal ind i en formular. f.eks 36
Hvis vedkommende havde tastet 40, så ville jeg vide at tallet 40 lå på index[1]'s plads, men nu har han tastet 36, så vil jeg gerne have finde værdien 40 i datasettet. Taster vedkommende 44 så skal den springe til 50 osv.

Hvordan grejer jeg lige den?
Avatar billede powerpunk Nybegynder
12. februar 2008 - 10:29 #1
Kan du ikke bare lave en Math.Ceiling() på brugerinput?

Math.Ceiling(36) => 40
Math.Ceiling(44) => 50
Avatar billede simm Nybegynder
12. februar 2008 - 13:09 #2
tror ikke det er helt nok.. jeg kan i hvertfald ikke lige vende det rigtigt i mit hoved :D du/I får lige hele forklaringen :)

jeg har to arraylists - en med nogle bredder og en med nogle højder
Når en person taster et tal ind f.eks 40 som findes i arraylisten, så finder jeg positionen vha indexOf.. så bliver resultatet 0 hvis det ligger først i arraylisten
Det samme gør jeg med højden. Tilsammen danner de positionen som min værdi ligger på i datasettet.

Så til sidst skriver jeg værdien i datasettet ud med:
vaerdi = ds.Tables[0].Rows[0][0].ToString();

Problemet opstår jo så hvis brugeren på hjemmesiden ikke taster en værdi der ligger i hhv. den ene eller den anden arraylist. Så skal jeg have fundet den værdi der ligger tættest på det brugeren har skrevet.

Giver det mening? :)
Avatar billede powerpunk Nybegynder
12. februar 2008 - 14:08 #3
Det er jeg ikke helt sikker på... :-o

Hvis din liste indeholder eks. 20, 40, 50, 60 og personen taster 36, vil du have den til at returnere 40, right?

Kunne du loope igennem din liste sådan her:

  //Finder index af nærmeste værdi under antagelse af at listen er sorteret fra
  //mindst til størst.
  private static int GetNearestIndex(int target, List<int> list)
  {
    int diff = int.MaxValue; //Størst mulig forskel fra start.
    int nearestIndex =-1;

    for (int i = 0; i < list.Count; i++)
    {
      int tempDiff = Math.Abs(target - list[i]); //find numerisk forskel på target og pågældende.
      if (tempDiff == 0) //Hvis forskellen er 0, kan den ikke blive mindre.
        return i; //returner derfor index.
      else if (tempDiff < diff) //Hvis forskellen er mindre end en tidligere
      {
        diff = tempDiff; //husk forskel
        nearestIndex = i; //husk index
      }
      else //ellers er forskellen større og vi bevæger os væk fra målet.
        break; //stop derfor eftersøgningen.
    }
    return nearestIndex; //returner den fundne værdi
  }
Avatar billede simm Nybegynder
12. februar 2008 - 14:16 #4
Jeg fik det til at virke med Binary Search :) Men smid et svar, så får du lige nogle point som tak for hjælpen :)
Avatar billede powerpunk Nybegynder
12. februar 2008 - 14:33 #5
Nå ja... selvfølgelig...
Det var ellers en fin dyb tallerken jeg fik opfundet ;-)

Svar!
Avatar billede simm Nybegynder
12. februar 2008 - 14:36 #6
Jaa.. men det kan være den bliver nyttig i anden sammenhæng :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester