Tri de map sur les valeur
Résolu/Fermé
omidaoui
Messages postés
32
Date d'inscription
dimanche 11 novembre 2012
Statut
Membre
Dernière intervention
2 décembre 2017
-
14 nov. 2012 à 17:46
omidaoui Messages postés 32 Date d'inscription dimanche 11 novembre 2012 Statut Membre Dernière intervention 2 décembre 2017 - 14 nov. 2012 à 22:26
omidaoui Messages postés 32 Date d'inscription dimanche 11 novembre 2012 Statut Membre Dernière intervention 2 décembre 2017 - 14 nov. 2012 à 22:26
A voir également:
- Tri de map sur les valeur
- Google map satellite gratuit - Guide
- Tri excel - Guide
- Itinéraire google map entre deux adresses - Guide
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Logiciel de tri de photos - Guide
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 14/11/2012 à 18:51
Modifié par KX le 14/11/2012 à 18:51
Je ne comprends pas trop quel résultat tu voudrais obtenir.
L'inverse d'une Map<K,V> devrait être quelque chose comme Map<V,Set<K>>
L'inverse d'une Map<K,V> devrait être quelque chose comme Map<V,Set<K>>
public static <K,V> Map<V,Set<K>> inverser(Map<K,V> map) { Map<V,Set<K>> result = new TreeMap<V,Set<K>>(); for (Entry<K, V> e : map.entrySet()) { if (result.containsKey(e.getValue())) result.get(e.getValue()).add(e.getKey()); else { TreeSet<K> set = new TreeSet<K>(); set.add(e.getKey()); result.put(e.getValue(), set); } } return result; } public static <K,V> Map<K,V> inverser2(Map<V,Set<K>> map) { Map<K,V> result = new TreeMap<K,V>(); for (Entry<V, Set<K>> e : map.entrySet()) for (K k : e.getValue()) result.put(k,e.getKey()); return result; } public static void main(String...args) throws FileNotFoundException { Map<String,Double> map1 = new TreeMap<String,Double>(); map1.put("a", 1.0); map1.put("c", 2.0); map1.put("h", 3.0); map1.put("f", 4.0); map1.put("e", 3.0); map1.put("g", 4.0); map1.put("e", 3.0); map1.put("d", 2.0); map1.put("b", 1.0); System.out.println(map1); // {a=1.0, b=1.0, c=2.0, d=2.0, e=3.0, f=4.0, g=4.0, h=3.0} Map<Double,Set<String>> map2 = inverser(map1); System.out.println(map2); // {1.0=[a, b], 2.0=[c, d], 3.0=[e, h], 4.0=[f, g]} Map<String,Double> map3 = inverser2(map2); System.out.println(map3); // {a=1.0, b=1.0, c=2.0, d=2.0, e=3.0, f=4.0, g=4.0, h=3.0} }La confiance n'exclut pas le contrôle
omidaoui
Messages postés
32
Date d'inscription
dimanche 11 novembre 2012
Statut
Membre
Dernière intervention
2 décembre 2017
14 nov. 2012 à 20:57
14 nov. 2012 à 20:57
le resultat ke je ve c'est a partire d'une map je ve avoir une map trier selon les valeurs
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
14 nov. 2012 à 21:05
14 nov. 2012 à 21:05
Comme avec mon code ou différemment ? Tu n'as qu'à reprendre mon petit exemple et me dire ce que tu voudrais obtenir comme résultat...
omidaoui
Messages postés
32
Date d'inscription
dimanche 11 novembre 2012
Statut
Membre
Dernière intervention
2 décembre 2017
14 nov. 2012 à 21:23
14 nov. 2012 à 21:23
j'ai utiliser ton code mais ma map n'a pas ete trié
voici ce ke j'ai recu comme resultat :
Map<Double,Set<String>> map2 = inverser(MapAtrier);
System.out.println("\n map2 = \n"+map2);
Map<String,Double> map3 = inverser2(map2);
System.out.println("\n map3 = \n"+map3);
map2 =
{3.58351893845611=[mohammed],
4.394449154672439=[fatima, hamza],
5.0106352940962555=[selwa],
6.697034247666484=[Najma, wafae],
6.956545443151569=[ouma],
6.962243464266207=[Ali, Aziz],
7.590852123688581=[tanae],
7.949797216161852=[aniss],
8.248529124800218=[adam],
8.332789468417959=[ayman],
8.733916174927524=[hamada],
10.343354087361625=[meryem],
14.859772251882303=[btihal, omar]}
map3 =
{Ali=6.962243464266207,
Aziz=6.962243464266207,
adam=8.248529124800218,
aniss=7.949797216161852,
ayman=8.332789468417959,
btihal=14.859772251882303,
fatima=4.394449154672439,
Najma=6.697034247666484,
hamada=8.733916174927524,
hamza=4.394449154672439,
meryem=10.343354087361625,
mohammed=3.58351893845611,
omar=14.859772251882303,
ouma=6.956545443151569,
selwa=5.0106352940962555,
tanae=7.590852123688581,
wafae=6.697034247666484}
le resultat n'est pa trié
voici ce ke j'ai recu comme resultat :
Map<Double,Set<String>> map2 = inverser(MapAtrier);
System.out.println("\n map2 = \n"+map2);
Map<String,Double> map3 = inverser2(map2);
System.out.println("\n map3 = \n"+map3);
map2 =
{3.58351893845611=[mohammed],
4.394449154672439=[fatima, hamza],
5.0106352940962555=[selwa],
6.697034247666484=[Najma, wafae],
6.956545443151569=[ouma],
6.962243464266207=[Ali, Aziz],
7.590852123688581=[tanae],
7.949797216161852=[aniss],
8.248529124800218=[adam],
8.332789468417959=[ayman],
8.733916174927524=[hamada],
10.343354087361625=[meryem],
14.859772251882303=[btihal, omar]}
map3 =
{Ali=6.962243464266207,
Aziz=6.962243464266207,
adam=8.248529124800218,
aniss=7.949797216161852,
ayman=8.332789468417959,
btihal=14.859772251882303,
fatima=4.394449154672439,
Najma=6.697034247666484,
hamada=8.733916174927524,
hamza=4.394449154672439,
meryem=10.343354087361625,
mohammed=3.58351893845611,
omar=14.859772251882303,
ouma=6.956545443151569,
selwa=5.0106352940962555,
tanae=7.590852123688581,
wafae=6.697034247666484}
le resultat n'est pa trié
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
14 nov. 2012 à 21:29
14 nov. 2012 à 21:29
En l'occurrence c'est map2 qui nous intéresse, map3 étant égal à map1 (l'inversion dans les deux sens)
Quand tu dis que ce n'est pas trié, je ne suis pas d'accord, tu as bien toutes tes valeurs dans l'ordre :
3.58351893845611, 4.394449154672439, 5.0106352940962555, 6.697034247666484, etc.
Quand tu dis que ce n'est pas trié, je ne suis pas d'accord, tu as bien toutes tes valeurs dans l'ordre :
3.58351893845611, 4.394449154672439, 5.0106352940962555, 6.697034247666484, etc.
omidaoui
Messages postés
32
Date d'inscription
dimanche 11 novembre 2012
Statut
Membre
Dernière intervention
2 décembre 2017
14 nov. 2012 à 21:36
14 nov. 2012 à 21:36
je suis tt a fait d'acord avec ce ke tu dis, mais le resultat ke j'en ai besoin ne doit pas avois des paire comme dans map2, mais plutot je ve mon resultat soit comme le suivant :
map3 =
{omar=14.859772251882303,
btihal=14.859772251882303,
meryem=10.343354087361625,
hamada=8.733916174927524,
ayman=8.332789468417959,
adam=8.248529124800218,
aniss=7.949797216161852,
tanae=7.590852123688581,
Najma=6.697034247666484,
wafae=6.697034247666484,
Ali=6.962243464266207,
Aziz=6.962243464266207,
ouma=6.956545443151569,
selwa=5.0106352940962555,
fatima=4.394449154672439,
hamza=4.394449154672439,
mohammed=3.58351893845611}
merci bcp pour votre aide
map3 =
{omar=14.859772251882303,
btihal=14.859772251882303,
meryem=10.343354087361625,
hamada=8.733916174927524,
ayman=8.332789468417959,
adam=8.248529124800218,
aniss=7.949797216161852,
tanae=7.590852123688581,
Najma=6.697034247666484,
wafae=6.697034247666484,
Ali=6.962243464266207,
Aziz=6.962243464266207,
ouma=6.956545443151569,
selwa=5.0106352940962555,
fatima=4.394449154672439,
hamza=4.394449154672439,
mohammed=3.58351893845611}
merci bcp pour votre aide
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 14/11/2012 à 21:39
Modifié par KX le 14/11/2012 à 21:39
Tu peux essayer comme ça alors :
public static <K extends Comparable<K>,V extends Comparable<V>> Set<Entry<K,V>> sortByValue(Map<K,V> map) { Comparator<Entry<K,V>> comparator = new Comparator<Entry<K,V>>() { @Override public int compare(Entry<K,V> e1, Entry<K,V> e2) { int n = e2.getValue().compareTo(e1.getValue()); if (n==0) return e1.getKey().compareTo(e2.getKey()); else return n; } }; TreeSet<Entry<K,V>> set = new TreeSet<Entry<K,V>>(comparator); set.addAll(map.entrySet()); return set; } System.out.println(sortByValue(map1)); // [f=4.0, g=4.0, e=3.0, h=3.0, c=2.0, d=2.0, a=1.0, b=1.0]