hlmod.hu
https://hlmod.hu/

Rendezés egy Multi-Dimenziós Listán
https://hlmod.hu/viewtopic.php?f=114&t=28299
Oldal: 1 / 1

Szerző:  JohanCorn [ 2017.10.03. 20:49 ]
Hozzászólás témája:  Rendezés egy Multi-Dimenziós Listán

MEGOLDVA! A kivitelezés csak az oszlopok elnevezésének közreiktatásával sikerült.

Üdv!

Tudna valaki írni egy kivitelezési formát az alábbi lista C értéke alapján történő rendezésére?

A - B - C
1 - 100 - 20
2 - 300 - 10
3 - 150 - 35
4 - 100 - 10
5 - 999 - 50

Ez a formázás után így nézne ki.

A - B - C
4 - 100 - 10
2 - 300 - 10
1 - 100 - 20
3 - 150 - 35
5 - 999 - 50

Másodlagos paraméter nem szükséges nekem sem.

Szerző:  Silent [ 2017.10.05. 14:53 ]
Hozzászólás témája:  Re: Rendezés egy Multi-Dimenziós Listán

Érdemes ilyenkor a megoldást is közzétenni, mivel lehetséges, hogy másnak is szüksége van ilyesmire.

Tegyük fel, hogy van egy objektumod, amelynek van 3 property-je.
Kód:
User {
    name,
    age,
    registerDate
}


Valamint egy akármilyen kollekciód, amely ilyen típusú objektumokat tárol.

Kód:
Collection<User> users = getUsersFromSomeDeeperLayer();


Tudsz több féle property alapján is rendezni, tegyük fel, hogy azt szeretnénk, hogy névszerinti, azon belül életkor szerinti növekvő sorrendbe legyenek a userjeink.
Ehhez hozzunk létre kettő nevesített comparatort (nem muszáj nevesített, lehet anoním objektumként is összehasonlítani, de ez talán átláthatóbb + újrahasznosítható).

Kód:
Comparator<User> byName = new Comparator<User>() {
   @Override
   public int compare(User user1, User user2) {
      return user1.name.compareTo(user2.name);
   }
}

Comparator<User> byAge= new Comparator<User>() {
   @Override
   public int compare(User user1, User user2) {
      return user1.age.compareTo(user2.age);
   }
}


Nincs más dolgunk, minthogy lepéldányosítsunk (vagy valami service-ből kérni egy instance-t) egy ComparatorChain osztályt, hozzáadni a comparatorjainkat és rendezni a kollekciót.

Kód:
   final ComparatorChain comparatorChain = new ComparatorChain();
   comparatorChain.addComparator(byName);
   comparatorChain.addComparator(byAge);
   
   List<User> sortedUsers = Lists.newArrayList(users);
   
   Collections.sort(sortedUsers, new Comparator<User>() {
      @Override
      public int compare(User user1, User user2 ) {
         return comparatorChain.compare(user1, user2);
      }
   }
   



Ez a Java-s megvalósítás, mivel nem írtad miben dolgozol és a Java áll a legközelebb hozzám, így ezt írtam le példaként. :D

Szerző:  JohanCorn [ 2017.10.06. 17:28 ]
Hozzászólás témája:  Re: Rendezés egy Multi-Dimenziós Listán

Még nem foglalkoztam Java-val, de bizonyára ez a jövőben is hasznos lesz. Jelenleg és a kérdésfeltételkor is PHP-val babráltam. Ez esetben volt egy egyszerű funkció az array_multisort az oszlopok sorba rendezésére.

Oldal: 1 / 1 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/