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

Sortiranje Dictionary

[es] :: .NET :: Sortiranje Dictionary

[ Pregleda: 1577 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
77.28.23.*



+3 Profil

icon Sortiranje Dictionary17.01.2018. u 10:21 - pre 29 meseci
imam ovaj rezultat

<22, 21>
<1, null>
<23, 22>
<2, null>
<21, null>

e sada hocu da dobijem novi dictionary u ovom formatu

<21, null>
<22, 21>
<23, 22>
<1, null>
<2, null>

logika je ova. TKey je id u bazi za neki html element t.e za dropdown, TValue je relacija ako dropdown je zavisan od nekog drugog (primer drzave(id = 1) i gradovi(id = 2), onda bi bilo <1, null>, <2,1>)
e sad iz nekog filtera vadim dictionary koi trebam da podredim kao sto sam dao primer. Neko iskustvo/ideja. Hvala vam.
Kude tumbe i tri bandere
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1327
*.dynamic.sbb.rs.



+307 Profil

icon Re: Sortiranje Dictionary17.01.2018. u 10:35 - pre 29 meseci
Da li pored zavisnosti ovi brojevi definišu i nekakav logički redosled (čini se da je tako)?
Zašto rezultat nije ovo?
Code:

<1, null>
<2, null>
<21, null>
<22, 21>
<23, 22>

 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12649



+4636 Profil

icon Re: Sortiranje Dictionary17.01.2018. u 10:59 - pre 29 meseci
Ako pricamo o Dictionary<TKey, TValue>, on nema definisan order. Npr. ako pogledas dokumentaciju za Key property videces da kaze "The order of the keys in the Dictionary<TKey, TValue>.KeyCollection is unspecified".
Ono sto ti treba je implementacija IEnumerable interfejsa koji brine o redosledu (array, lista, sta ti je vec prakticno). Znaci, ako je ovo bio Dictionary<int, int?>, treba ti ili IEnumerable<KeyValuePair<TKey, TValue>> ili, verovatno bolje IEnumerable<Tuple<TKey, TValue>>.
Ako vec imas Dictionary, ne brini, on vec implementira IEnumerable<KeyValuePair<TKey, TValue>> i mozes lako odraditi sortiranje i konverziju.
Npr. ako bi hteo da sortiras po key-u mogao bi da uradis nesto kao MyDict.OrderBy(pair => pair.Key).ToList()
Posto ti imas neku drugu logiku za sortiranje, mozes da napravis implementiras IComparer i prosledis ga kao drugi parametar (pogledaj https://msdn.microsoft.com/en-us/library/bb549422(v=vs.110).aspx).
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
77.28.23.*



+3 Profil

icon Re: Sortiranje Dictionary17.01.2018. u 11:25 - pre 29 meseci
Zato sto prvo moraju da idu dropdown koi imaju zavisnost pa onda drugi elementi.
Citat:
dusans: Da li pored zavisnosti ovi brojevi definišu i nekakav logički redosled (čini se da je tako)?
Zašto rezultat nije ovo?
Code:

<1, null>
<2, null>
<21, null>
<22, 21>
<23, 22>


zasto sto moraju da idu prvo dropdown koi su zavisni jedni od druge pa onda svi ostali ementi.
Kude tumbe i tri bandere
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
77.28.23.*



+3 Profil

icon Re: Sortiranje Dictionary17.01.2018. u 11:29 - pre 29 meseci
Citat:
Shadowed:
Ako pricamo o Dictionary<TKey, TValue>, on nema definisan order. Npr. ako pogledas dokumentaciju za Key property videces da kaze "The order of the keys in the Dictionary<TKey, TValue>.KeyCollection is unspecified".
Ono sto ti treba je implementacija IEnumerable interfejsa koji brine o redosledu (array, lista, sta ti je vec prakticno). Znaci, ako je ovo bio Dictionary<int, int?>, treba ti ili IEnumerable<KeyValuePair<TKey, TValue>> ili, verovatno bolje IEnumerable<Tuple<TKey, TValue>>.
Ako vec imas Dictionary, ne brini, on vec implementira IEnumerable<KeyValuePair<TKey, TValue>> i mozes lako odraditi sortiranje i konverziju.
Npr. ako bi hteo da sortiras po key-u mogao bi da uradis nesto kao MyDict.OrderBy(pair => pair.Key).ToList()
Posto ti imas neku drugu logiku za sortiranje, mozes da napravis implementiras IComparer i prosledis ga kao drugi parametar (pogledaj https://msdn.microsoft.com/en-us/library/bb549422(v=vs.110).aspx).



Hvala na opsirnom i veoma dobrog objasnjena :)

sve to meni jasno, nisam hteo da ulazim duboko duboko ali ja Dictionary<class, Tuple<string, string>> pa ovde ima neki filter i hteo sam da malo uprostim to i uzmem sve to u Dictionary<int, int> i odradim sporedbu i sortiranje. Znaci ovde problem mi je logika za neko "optimalno" resenje. Kako sortirati podredjenje dvojke sa uslovima koi sam naveo gore to me malo muci i ne pada mi na pamet neko pametno resenje.

edit: to je i moja neka logika da implemetiram IComparer, ali kako podrediti, nemogu da nadjem neku logiku... :S

[Ovu poruku je menjao ik0 dana 17.01.2018. u 12:45 GMT+1]
Kude tumbe i tri bandere
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12649



+4636 Profil

icon Re: Sortiranje Dictionary17.01.2018. u 12:01 - pre 29 meseci
Ovo:
Citat:
e sada hocu da dobijem novi dictionary u ovom formatu

<21, null>
<22, 21>
<23, 22>
<1, null>
<2, null>


ti nije u skladu sa ovim:

Citat:
Zato sto prvo moraju da idu dropdown koi imaju zavisnost pa onda drugi elementi.


Ako hoces prvo one kojima vrednost nije null a onda ostale, mozes uraditi sledece:
Code (csharp):
MyDic.Where(pair => pair.value != null).Union(MyDic.Where(pair => pair.value == null))

Ako hoces da pri tome budu i sortirani po key-u:
Code (csharp):
MyDic.Where(pair => pair.value != null).OrderBy(pair => pair.key).Union(MyDic.Where(pair => pair.value == null).OrderBy(pair => pair.key))

 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1226



+92 Profil

icon Re: Sortiranje Dictionary17.01.2018. u 13:19 - pre 29 meseci
Zar ne bi trebalo ovako da bude sortirano (21 ima null, pa ide sa drugima koji imaju null):

Code:
<22, 21>
<23, 22>
<1, null>
<2, null>
<21, null>



Shadowed je blizu, ali ima i prostije rešenje, ThenBy (sortiranje posle ranijeg sortiranja):

Code (csharp):
MyDic.OrderBy(pair => pair.Value != null).ThenBy(pair => pair.key)

 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
77.28.3.*



+3 Profil

icon Re: Sortiranje Dictionary17.01.2018. u 17:04 - pre 29 meseci
Hvala vam na odgovorima.

lepse da objasnim TKey = id dropdown, TValue = ako je zavisan TKey (id dropdown-na skim je zavisan)

primer

baza

id|Name
1|Country
2|Region
3|City
4|Name
5|Test

dictionary<3, 2>, <4, null> <1, Null>, <2, 1> <5, Null>

e sad <1, null> znaci da treba da je sam ali ima child <2, 1> i onda tu ide druga podredjivanje. Zato sam se i ja malo popetljao...

to je neka moja struktura taka da ne mora da bude dictionary ako imate bilo kakvo drugo resenje slobodno...

Kude tumbe i tri bandere
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1327
*.dynamic.sbb.rs.



+307 Profil

icon Re: Sortiranje Dictionary17.01.2018. u 17:22 - pre 29 meseci
Lepo ti to prebaci u kodu iz parova u drvo, posle sortiraš root-ove a i dublje kako ti volja (po broju dece, po broju descendants-a, po čemu god već...)
Posle je trivijalno, prođeš rekurzivno sekvencijalno kroz drvo i napuniš listu.

Znam da izgleda kao da kolješ vola za kilo mesa, ali je rešenje fleksibilnije, sutra kad vidiš da ti treba drugačiji sort,
pa onda više od jednog podređenog, itd... biće ti lakše da dobiješ ono što ti treba. + što tvoji parovi mnogo liče na drvo.

https://stackoverflow.com/ques...-convert-list-of-items-to-tree

[Ovu poruku je menjao dusans dana 17.01.2018. u 18:32 GMT+1]
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 2861



+1162 Profil

icon Re: Sortiranje Dictionary17.01.2018. u 17:32 - pre 29 meseci
Ta tvoja struktura ima ime i zove se šuma.

Stablo je povezan graf, a ako imaš više stabala, onda je to šuma.

U tvom primeru imaš stabla 21 - 22 - 23, 1, 2

Koliko ja shvatam tvoj problem, želih da ih sortiraš tako da sortiraš prvo po dubini stabla (najdublje stablo je 21-22-23), a zatim po vrednosti korena. Samo stablo ispisuješ nekim metodom obilaska stabla (recimo inorder)

Dakle, prvo stablo sa korenom 21 i njegovi čvorovi u inorder redosledu, zatim stablo sa korenom 1, pa stablo sa korenom 2

21
22
23
1
2
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
*.205.113.37.robi.com.mk.



+3 Profil

icon Re: Sortiranje Dictionary17.01.2018. u 20:41 - pre 29 meseci
Trebao iz prve da kopiram realan primer, zivinjavam se zbog toga. Znaci moze da bude <23, null>, <22, 23> <1, 22>, <cmbStreet, 1>. Nemam numericki oreder. Implemetacija IComparer resava stvar (uradio primer ali neka "laka" logika sortiranja).

Moja logika

nadji sve Dictionary<Tkey, TValue> where TValue == null and TKey se nalazi na mesto TValue -> OrderBy(TKey) -> (ovde valjda dobijam sve TKey, TValue Pair koi su zavisni dropdown i su prvi)
kreiram onaj koi je prvi u listu -> onda trazim gde njegov Tkey se ljavlja kao TValue, nadjem -> Kreiram taj -> Trazim dali njegov TKey se javlja kao TValue -> Sve dok TKey se neponavlja kaoi TValue -> Onda kreiram sledeci iz prve liste...

[Ovu poruku je menjao ik0 dana 17.01.2018. u 21:54 GMT+1]

[Ovu poruku je menjao ik0 dana 17.01.2018. u 21:55 GMT+1]
Kude tumbe i tri bandere
 
Odgovor na temu

[es] :: .NET :: Sortiranje Dictionary

[ Pregleda: 1577 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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