Třídění položek kolekce   otázka

ASP.NET WebForms

Dobrý den,

chtěl bych se zeptat, zda by mi někdo neporadil s tříděním položek v kolekci:

Vytvořil jsem si vlastní třídu a dále kolekci, zjednodušeně např:

Public Class MojeTrida
    Public MojeID   As Integer
    Public MujPopis As String
End Class

Public MojeKolekce As New Collections.generic.List(Of MojeTrida)()

Dále jsem Kolekci naplnil hodnotami např:

Dim x As New MojeTrida
    x.MojeID   = 1
    x.MujPopis = "Popis1"
MojeKolekce.Add(x)
Dim y As New MojeTrida
    y.MojeID   = 2
    y.MujPopis = "Popis2"
MojeKolekce.Add(y)
Dim z As New MojeTrida
    z.MojeID   = 0
    z.MujPopis = "Popis0"
MojeKolekce.Add(z)
'atd

A teď bych potřeboval položky kolekce setřídit sestupně podle MojeID v MojeTrida a vůbec nevím jak na to...

Předem díky za odpověď...

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
MojeKolekce.Add(New MojeTrida With {.MojeID = 1})
MojeKolekce.Add(New MojeTrida With {.MojeID = 2})
MojeKolekce.Add(New MojeTrida With {.MojeID = 3})
MojeKolekce.Sort(Function(x As MojeTrida, y As MojeTrida) _
x.MojeID.CompareTo(y.MojeID) * -1)
'Seřadí sestupně podle MojeID 3, 2, 1

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, díky za odpověď. Zkouším to podle Vašeho popisu, ale nějak to nechce pracovat... "Expression expected"

Zkoušel jsem spustit přesně tento konkrétní zjednodušený příklad abych si byl jistý, že nedělám někde překlep, ale ani tak to nepracuje...

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Ktorú verziu Visual Studia používate?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, Visual Studio nepoužívám..., Webovou aplikaci píšu v PSPadu.

Aplikace běží na IIS vr.: 7.5, verze .Net Framework 2.0

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Vy píšete webapp v PSPadu????!Tak to se pak není čemu divit,že se ptáte na takové "prkotiny".V PSpadu si pište skripty nebo samotné HTML,ale asp.net určitě ne!

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

PSPad, člověče proberte se. Navíc Lambda funkce Framework 2.0 nepodporuje.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Potom je jasné, prečo Vám to nejde. .NET Framework 2.0 pokiaľ viem nepodporuje Lambda funkcie. Ak chcete používať takto starú verziu .NET Frameworku, budiž, niektorí nemajú možnosť používať najnovšie technológie, ale asp.net v PSPade... ešte k tomu keď Visual Web Developer je zdarma... Pripadá mi to trochu ako masochizmus. PSPad totiž nemá viaceré funkcie dostupné vo Visual Web Developeri, napríklad Intellisense.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Znamená to tedy, že položky kolekce ve verzi .Net Framework 2.0 nijak neseřadím? Na serveru běží i jiné aplikace, u kterých si nejsem jistý, že by aktualizace .Net Framework nezpůsobila nějaké komplikace.

Jaká verze již výše zmiňované podporovala?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Nie, znamená to, že bude nutné kód upraviť. Tú lambda funkciu dajte zvlášť do tej istej triedy ako normálnu funkciu, a potom na tom mieste, kde bola, dáte delegáta, ktorý odkazuje na upravenú funkciu. Nie som si ale istý, ako presne to treba robiť pod .NET Frameworkom 2.0, skúste sa s tým trochu pohrať.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bohužel se mi to opravdu nechce fungovat, ani když funkci dám zvlášť.

Napsal jsem tu funkci jinak, a .Sort() jsem uplně vypustil.

Function SortingItems()

    Dim j As Integer = 0
    'nejprve si zjistím maximální hodnotu MojeID
 
    For i As Integer = 0 To MojeKolekce.Count - 1  
         Dim x As MojeTrida = MojeKolekce(i)
         If x.MojeID > j Then
             j = x.MojeID
         End If
    Next

    'Poté procházím postupně všechny položky od mojeID=0 až MAX a pak je postupně vkládám na začátek kolekce, a původní z kolekce vymažu.

    For w As Integer = 0 To j 
        For u As Integer = 0 To MojeKolekce.Count - 1  
            Dim x As MojeTrida = MojeKolekce(u)
            If x.MojeID = w Then
                MojeKolekce.RemoveAt(u)
                MojeKolekce.Insert(0, x)
            End If
        Next  
    Next

End Function

Je to sice trochu jako když se chci pravou rukou poškrábat za levým uchem, ale takto mi to jedině funguje. Jsem v ASP.NET ještě zajíc, takže některé souvislosti si automaticky nedám dohromady. Díky za příspěvky...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Toto ale není o asp.net,ale o .net samotném.Kolekce nejsou záležitostí asp.net,ale frameworku obecně

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tohle je mimořádně hloupé, pomalé a obecně nepoužitelné řešení. Co když někdo bude mít ID dvě miliardy? Jestli vám tam půjde cyklus od 0 do dvou miliard a v každém kromu budete ještě procházet celé pole, které třídíte, tak tedy potěš koště, to se načekáte dost dlouho. Nehledě na to, že tím nesetřídíte desetinná čísla, texty ani cokoliv jiného, bude to "fungovat" jen na integery.

Pokud potřebujete .NET 2.0, standardní postup je tento - použijete na kolekci metodu Sort, případně pokud je to pole, je funkce Array.Sort. Pokud jsou v poli / kolekci prvky typu string, int, double apod., tak je to jasné - setřídí se to podle nich. Pokud tam dáte vlastní objekty, tak jim naimplementujte rozhraní IComparable - blogpost o tom jsem psal zde: http://www.vbnet.cz/blog-clanek--170-net...

A v PSPadu ty aplikace určitě nepište, nainstalujte si Visual Web Developer 2010 Express, je zdarma a máte tam pořádnou intellisense, podporu ladění atd.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback