-3
votes

Tri de la liste de matrices

J'essaie de trier un tableau de liste qui contient des cordes contenant des entiers et des lettres, mais lorsque je le fais la manière régulière, je reçois une sortie bizarre: Code pertinent: XXX PRE>

Je m'attends: P>

"98 food"
"9 hello"
"3 pencil"
"2514 human"
"105 cat"


8 commentaires

Pourquoi espérez-vous exactement que ces résultats? Vous avez demandé un ordre alphabétique inversé qui semble exactement ce que vous obtenez


Pourquoi 2514 humain devrait être avant 105 chat ?


Vous triez le texte lexicographique . Vous n'éprouvez pas les chiffres. 9 ... est supérieur à 2 ... peu importe ce qui vient après. Vous devez interpréter les chiffres en tant que numéros réels au lieu de texte pour trier cela dans la manière dont vous voulez.


Je suppose que vous aurez besoin d'un objet composite et faire une tresse inverse et non sur le mot, mais sur la valeur numérique.


vos valeurs ne sont pas un entier, il est comparé comme une chaîne


@ Blm-maxx Vous devez trier descendances en fonction du compte


Comme une note à vous tous qui ne lisez pas le contexte complet. Je fais de la relance d'une commande de 2 premiers chiffres et je n'ai rien à voir avec les alphabets comme vous le voyez dans l'exemple que j'ai 2 mots commençant par H et entre celui qui a un p


Utilisez mappe au lieu de ArrayList, il sera plus facile d'obtenir ce que vous désirez. Puis trier sur les touches.


4 Réponses :


-1
votes

Qu'est-ce que vous avez, c'est exactement l'ordre lexicographique car pas les chiffres sont comparés mais leurs chiffres alphabétiquement. Si vous souhaitez un autre comportement, vous devriez envisager d'implémenter votre propre comparateur dans lequel vous analyserez les chiffres.


3 commentaires

En tant que note, le terme est lexicographique . En outre, la réponse ressemble davantage à un commentaire qu'une réponse complète. Une réponse complète fournirait probablement une solution prête, voir Comment répondre .


Ok, merci pour votre conseil


Vous vous rendez compte que votre réponse n'a aucun sens quand il y a un "P" entre 2 "H". Maintenant, cela a dit que c'était plus comme si le tri ne prend que le premier chiffre et regroupant tous les TheBstarts avec 1 puis tout ce qui commence avec 2 et ainsi de suite



0
votes

Utiliser le compositeur pour résoudre votre problème comme celui-ci

​​Ajoutez ce code à l'intérieur de votre classe p> xxx pré>

Ajouter ce code dans votre fonction d'appel P>

[2514 human, 105 cat, 98 food, 9 hello, 3 pencil]


6 commentaires

Que diriez-vous de ce code BLH-MAXX?


Est-ce que cela fonctionne sur une entrée de 100K?


Si les données sont de même que votre code posté, cela fonctionnera.


c'est un redis db avec plus ou moins de rangées de 100k avec un nombre et un mot


Oui ça va marcher


Vous pouvez utiliser ce code comme util pour appeler à nouveau pour trier avec votre propre commande personnalisée.



0
votes

Je pense que vous devriez créer une classe pour représenter les éléments de la liste. Par exemple: xxx

Votre code deviendrait alors: xxx

avec le résultat suivant: xxx


2 commentaires

Cela fonctionnera-t-il toujours si j'ai dit environ 100k entrées?


@ Blh-maxx oui ??



0
votes

Vous devez avoir un comparateur personnalisé pour satisfaire vos besoins. Solution Java 8:

List<String> words = new ArrayList<>();  
words.add("9 hello");
words.add("98 food");
words.add("105 cat");
words.add("2514 human");
words.add("3 pencil");

// Sort the existing list
words.sort(Comparator.comparing(s -> Integer.parseInt(s.split(" ")[0]), Comparator.reverseOrder()));

// To create new sorted list
List<String> sortedWords = words.stream()
            .sorted(Comparator.comparing(s -> Integer.parseInt(s.split(" ")[0]), Comparator.reverseOrder()))
            .collect(Collectors.toList());


0 commentaires