J'ai un dictionnaire des objets "Titre" dans mon code C #: avec la classe de titre Définissez comme suit: p> Dictionnaire class Title
{
public long TitleID { get; set;}
public string TitleText { get; set;}
public string TitleNumber { get; set;}
}
3 Réponses :
Je ne suis pas sûr de comprendre quelles règles vous souhaitez appliquer à votre logique de commande, mais pour moi, Linq peut faire ce que vous voulez.
dico.OrderBy(kvp => kvp.Value.TitleNumber).ToDictionary(kvp => kvp.Key);
Cela ne fonctionnera pas avec 3.1, 3.10, 3.1.1
@Nicolasdaumalle Quel est l'ordre lorsque Concernant 3.1, 3.1.1, 3.11, 3.10?
Je l'ai testé avec le Dictionnaire de Dico suivant = nouveau dictionnaire
Il fonctionne avec des valeurs telles que "1.2.1" aussi
Vous pouvez utiliser une fonction d'assistant cheapo: puis trier avec linq: p> Certains artistes de Linq peuvent même le rouler Tout en un, mais pas moi; -) p> Notez que j'ai omis tous les chèques! Vous pouvez également ignorer une ligne dans la fonction et renvoyer direcly et choisir un nombre maximum de digitts dans le format de chaîne .. p> entrée (classe légèrement modifiée): p> 1.1
1.1.0
1.1.1
1.1.3
1.2
1.11
1.20
Cela a fonctionné comme un charme, mais j'ai utilisé Linq comme celui-ci pour éviter les erreurs: Liste
Merci beaucoup pour votre aide!
Une classe que vous pouvez implémenter pour contrôler plus correctement le Versioning. avec un exemple sur la façon de l'utiliser: P> var t1 = new TitleNumber("5.34.20");
var t2 = new TitleNumber("4");
var t3 = new TitleNumber("5.34");
var t4 = new TitleNumber("5.34.20.1");
var t5 = new TitleNumber("5.35");
var l = new List<TitleNumber>() { t1, t2, t3, t4, t5 };
var r = l.OrderBy(x => x).ToList();
Merci, je vais le tester!
Ordonné comment i>? Comment ces deux-là doivent-ils être commandés:
2.10 code> vs2.9 code>?À propos, les dictionnaires n'ont pas de commande, vous devrez les mettre dans l'une des collections séquentielles ou commandées.
Vous devrez écrire un comparateur. Pas du tout du tout. MSDN < / a>
Il faut commander comme celui-ci: 2.9, 2.10, 2.11 etc ..
Ensuite, vous aurez besoin d'une implémentation de «tri naturel». Pas sûr qu'il y en a une intégré à .NET, mais voyons d'abord si cela a déjà été répondu ici.
Il y en a un dans Windows, disponible via p / invoke: Stackoverflow.com/questions/248603/... , vous pouvez l'utiliser pour comparer deux éléments d'une telle collection.
@ Lassevågsætherkarlsen je le contrôle, merci
Vous avez défini Titlenumber en tant que type long, mais mentionné une valeur possible étant: 4.6.5.2.5. Ce n'est certainement pas une longue. Est-ce une corde ou est-ce une longue?
@ Lassevågsætherkarlsen Merci, déjà corrigé cela juste après que je l'ai tapé. Je préférerais que l'op me dise quelles sont ses exigences. Semble un peu plus approprié. :)
@coderpros
titlenumber code> est i> une chaîne? Peut-être qu'il y avait une version très précoce de la question éditée à l'intérieur de la période de grâce.Titlenumber est une chaîne comme indiqué dans la classe de titres.
@Nicolasdaumalle Je suis attardé ... regardait Tittidid. C'est ce que je reçois de la réveil et de la regarder immédiatement. Oops
@coderpros: D Pas de problèmes!
@Taw je vais essayer ça, merci.
@Nicolasdaumalle Quel est l'ordre lorsque Concernant 3.1, 3.1.1, 3.11, 3.10?
@Anuviswan Il convient de commander comme ce que vous avez écrit.