J'ai une liste d'éléments, dont chacun a un rang associé.Transférer des éléments sans modifier les rangs de tous les éléments
Item 1, Rank=1
Item 2, Rank=2
Item 3, Rank=3
Item 4, Rank=4
Item 5, Rank=5
Je veux concevoir une méthode qui gère re-classement des articles avec peu ou pas de changement dans les rangs des autres articles.
Une solution à laquelle je pensais était de tirer parti des décimales et d'utiliser le type de variable double de Java. Ainsi, par exemple si je item5 Jonglez entre item2 et item3, ce serait la sortie -
Item 1, Rank=1
Item 2, Rank=2
Item 5, Rank=2.5
Item 3, Rank=3
Item 4, Rank=4
Et ainsi de suite,
Item 1, Rank=1
Item 2, Rank=2
Item 4, Rank=2.25
Item 5, Rank=2.5
Item 3, Rank=3
Cette solution fonctionne, mais après un moment donné (~ 55 se déplace à la même position, j'atteins la double limite variable et je vais probablement devoir réinitialiser tous les rangs à ce point)
Je me demandais juste s'il y avait une meilleure façon de résoudre ce problème?
Quelques points à garder à l'esprit.
- J'ai besoin de stocker cette structure de données dans une base de données (Point, Rank) et je construirai un service Web qui obtient tous les éléments dans un ordre de tri en fonction de rang donc je rendrais un appel DB pour obtenir tous les articles triés par le champ de classement.
- Je vais utiliser Java, donc je ne peux traiter qu'avec des variables Java.
Jetez un oeil à https://github.com/mixonic/ranked-model - Je sais que c'est ruby / rails et non java, mais vous pouvez regarder leur mise en œuvre et prendre quelques notes. Ils utilisent de très grands espaces entre les rangs pour atteindre leurs objectifs de pouvoir changer les choses sans changer tout le rang. – PressingOnAlways
Quelle structure de données utilisez-vous? Les listes chaînées permettent l'insertion de O (1) dans les listes une fois que vous avez parcouru l'index souhaité. Vous pouvez ensuite utiliser l'emplacement structurel de l'élément dans la liste pour indiquer le rang. – 4castle
J'ai vraiment pensé à cette solution aussi. Mais là encore, je serais juste en train d'étendre ma portée et j'atteindrai la limite plus tard. Merci de m'avoir indiqué le github quand même ... :) –