bala nemate rašė: > hoj, > > prireikė dotnetinę biblioteką pasidaryti talpos t8rio nustatymui. > formulės nėra, yra 1330 eilučių lenta su išrašytais lygiais ir tūriu prie > tokio lygio. paduodi lygį, gauni tūrį. > > Ar yra efektyvesnis būdas su kokiu C# tai optimaliau pasidaryti, nei daryti > switch'ą su 1330 elementų? Iš principo būtų įdomi funkcija (kaip tai atrodo bent jau grafike); veikiausiai pavyktų suraityti į polinomą su priimtinomis paklaidomis (aproksimuojant keliais segmentais). Nors kita vertus, jei lygio reikšmės toje lentelėje yra tiesėje (kx + b; t.y. kinta vienodu intervalu), tai nieko nebus _sparčiau_, kaip paprasčiausias masyvas. Tuomet lygiui gali pasirašyti funkciją, kuri reikšmę transformuoja į masyvo indeksą. Pvz: Lygis Talpa 5 10 7 20 9 30 11 40 13 60 15 80 .... Funkcija: lygis = 5 + 2·x; x = (lygis - 5)/2 Masyvas: talpa[0] = 10 talpa[1] = 20 talpa[2] = 30 talpa[3] = 40 talpa[4] = 60 talpa[5] = 80 .... Pseudokodas: function GetVolume(level) { i = (level - 5)/2 // patikrinimas ar reikšmė sveikas skaičius ir kt.; // interpoliavimas tarp reikšmių return talpa[i] } O kitais atvejais, ypač kai tingisi galvoti, tai jau minėjo — hashtable (Dictionary). Turėtų būti žymiai švariau kode, paprasčiau manipuliuoti, _galbūt_ (tai dar didelis klausimas, kai elementų tiek nedaug) ir sparčiau. Jei switch'e naudojai string'us (case '12': ...), tai kompiliatorius tavo ilgesnį switch'ą optimizuodamas ir pats paverčia į Dictionary (nieko papildomai ir daryti nereikia). O jei ten int, tai kompiliatorius tą switch'ą optimizuoja paversdamas medžiu, tad iš tikrųjų nelabai ką daugiau ir optimizuosi. Nebent tik naudodamas masyvą, tačiau labai abejoju ar rašai tiek greitaveikai kritišką kodą, kad masyvo indeksavimas turėtų ne nykstamai mažą pranašumą prieš paiešką kelių tūkstančių elementų medyje.