Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sortiranje linija text box-a tako da se sadrzaj tretira kao integer? - VB 2008

[es] :: .NET :: Sortiranje linija text box-a tako da se sadrzaj tretira kao integer? - VB 2008

[ Pregleda: 1421 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

7e7
Somewhere in between

Član broj: 54333
Poruke: 100
*.static.sbb.rs.



Profil

icon Sortiranje linija text box-a tako da se sadrzaj tretira kao integer? - VB 200825.02.2013. u 09:31 - pre 135 meseci
Pozdrav svima,

imam problem sa prikazivanjem rezultata nekog glasanja u text box-u zeljenim redoslijedom.

Naime, imam jedan niz tipa string koji se zove privRez() i njegov sadrzaj izgleda npr. ovako:

0 bodova ima ucesnik broj 1
0 bodova ima ucesnik broj 2
5 bodova ima ucesnik broj 3
20 bodova ima ucesnik broj 4
12 bodova ima ucesnik broj 5
10 bodova ima ucesnik broj 6


Nakon toga dolazi dio koda koji elemente tog niza ispisuje u jedan text box odakle ga korisnik moze kopirati.

Ja zelim da mi rezultati u text box-u budu sortirani prema prvoj koloni (tj. prema broju bodova) od najveceg ka najmanjem.

Kad pozovem Array.Sort() metodu na ovaj niz, ona ga sortira prema alfabetu. Poslije toga dodam Array.Reverse() (cisto da bi mi najveci broj bodova bio na vrhu), i to izgleda ovako:

10 bodova ima ucesnik broj 6
12 bodova ima ucesnik broj 5
20 bodova ima ucesnik broj 4
5 bodova ima ucesnik broj 3
0 bodova ima ucesnik broj 1
0 bodova ima ucesnik broj 2

Kao sto se vidi, niz je sortiran prema alfabetu, a ne prema broju bodova. Sort metoda tretira ga kao string jer i jeste niz tipa string.

Moze li me neko savjetovati kako da sortiram niz tako da prvu kolonu tretira kao integer vrijednosti (da sortirane vrijednosti budu 20, 12, 10, 5, 0, 0)?

Hvala!



 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Sortiranje linija text box-a tako da se sadrzaj tretira kao integer? - VB 200825.02.2013. u 09:42 - pre 135 meseci
Generalno, problem nestandardnog sortiranja se u svakom jeziku rešava tako što se za sortiranje napiše funkcija koja poredi dva elementa i koja daje rezultat manji od 0 ako je prvi element "manji" od drugog, nula ako su "jednaki" i rezultat veći od nule ako je prvi element "veći" od drugog. Tada se rutini za sortiranje daje pokazivač na funkciju koja vrši poređenje kao jedan od argumenata.

Ovde imaš objašnjenje i primer za VB:
http://msdn.microsoft.com/en-us/library/aa311216(v=vs.71).aspx
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Re: Sortiranje linija text box-a tako da se sadrzaj tretira kao integer? - VB 200825.02.2013. u 10:41 - pre 135 meseci
Napravis klasu otprilike ovako:

Code:

public class Result
{
    public int PlayerNumber;
    public int Points;

    public string ToString()
    {
        return Points.ToString() + " bodova ima ucesnik broj " + PlayerNumber.ToString();
    }
}


I onda koristis niz Result-a i sortiras sa: Results.OrderBy(r => r.Points).
 
Odgovor na temu

7e7
Somewhere in between

Član broj: 54333
Poruke: 100
*.static.sbb.rs.



Profil

icon Re: Sortiranje linija text box-a tako da se sadrzaj tretira kao integer? - VB 200827.02.2013. u 10:40 - pre 135 meseci
Citat:
djoka_l: Generalno, problem nestandardnog sortiranja se u svakom jeziku rešava tako što se za sortiranje napiše funkcija koja poredi dva elementa i koja daje rezultat manji od 0 ako je prvi element "manji" od drugog, nula ako su "jednaki" i rezultat veći od nule ako je prvi element "veći" od drugog. Tada se rutini za sortiranje daje pokazivač na funkciju koja vrši poređenje kao jedan od argumenata.

Ovde imaš objašnjenje i primer za VB:
http://msdn.microsoft.com/en-us/library/aa311216(v=vs.71).aspx


Hvala. Shvatio sam da se to tako radi, skontao sam da sort metoda ima 16 tih tzv. overload-a i citao sam sve te msdn clanke ali nisam to uspio shvatiti, pa sam zato pitao vas ovdje.


@ Shadowed:

Hvala, pokusacu iskoristiti tu OrderBy() metodu.
 
Odgovor na temu

7e7
Somewhere in between

Član broj: 54333
Poruke: 100
*.static.sbb.rs.



Profil

icon Re: Sortiranje linija text box-a tako da se sadrzaj tretira kao integer? - VB 200827.02.2013. u 20:05 - pre 135 meseci
Hvala vam jos jednom, uspio sam napraviti sta sam htio koristeci OrderByDescending() metodu. Evo stavicu ovdje kod, mozda nekome bude koristilo:

Pojasnjenje: rezultati su sadrzani u intFot nizu koji ima 1 vise element nego sto ima ucesnika (nisam htio da koristim prvi element indeksa 0). Onaj niz privRez koji sam spominjao u prvom postu je izbacen iz upotrebe. Niz ucesnici ima elemenata tacno koliko ima ucesnika.

Code:

        Structure Ucesnik
              Public Broj As String
              Public Bodovi As Integer
        End Structure


        'ocisti textbox
        tbxRezultati.Clear()

        'napravi niz Ucesnik objekata
        Dim ucesnici (UnosPodatakaForm.intBrojFot - 1) As Ucesnik
        For i = 0 To UnosPodatakaForm.intBrojFot - 1
            ucesnici(i) = New Ucesnik With {.Broj = i + 1 , .Bodovi = MainForm.intFot(i + 1)}
        Next i

        'sortiraj po bodovima
        Dim query As IEnumerable(Of Ucesnik) = _
            ucesnici.OrderByDescending(Function(Ucesnik) Ucesnik.Bodovi)

        'ispisi rezultate u text box
        For Each uces As Ucesnik In query
            tbxRezultati.Text = tbxRezultati.Text & vbCrLf & uces.Bodovi & " bodova ima ucesnik broj " & uces.Broj
        Next uces

 
Odgovor na temu

[es] :: .NET :: Sortiranje linija text box-a tako da se sadrzaj tretira kao integer? - VB 2008

[ Pregleda: 1421 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.