Je veux quelque chose comme une liste < chaîne >, mais chaque fois que je fais un « Ajouter », il conserve la liste triée. Des idées?comme une liste <string> mais conserve les chaînes commandées?
Répondre
Vous pouvez essayer un SortedList ou un SortedDictionary. Les deux feront ce que vous devez faire, mais avec des implémentations légèrement différentes. Vous pouvez trouver les différences mises en évidence here.
Notez que ne sont pas accessibles SortedList et SortedDictionary par index et ne mettent pas en œuvre l'interface IList
La classe SortedList?
Utiliser la liste < T> et appelez List< T >.Sort.
List<string> dinosaurs = new List<string>();
dinosaurs.Add("Pachycephalosaurus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Mamenchisaurus");
dinosaurs.Add("Deinonychus");
Console.WriteLine("\nSort");
dinosaurs.Sort();
EDIT: Vous pouvez également étendre Liste < T>, override Ajouter, choisir un.
ExtendedList:
public class ExtendedList<T> : List<T>
{
public new void Add(T t)
{
base.Add(t);
base.Sort();
}
}
ExtendedList avec BinarySearch:
public class ExtendedList<T> : List<T>
{
public new void Add(T t)
{
int index = base.BinarySearch(t);
if (index < 0)
{
base.Insert(~index, t);
}
}
}
J'ai pensé à cela, mais je ne veux pas le tri à chaque fois que j'accède à la liste – JoelFan
Vous comprenez que tout ce que vous utilisez pour trier automatiquement aura des frais généraux droit? –
Vous pouvez créer votre propre classe, MySortList, qui implémente IList, et votre propre interface IMySort
Qui aurait une méthode supplémentaire de AddAndSort (T t)
ce ne serait pas avec interchangable IList normale cependant, mais il ne fait ce que vous devez.
Cela fonctionnerait réellement si votre implémentation de 'Add' appelait' AddAndSort'. Et parce que vous implémentez IList, il serait _ interchangeable avec IList ... c'est le point de séparer l'interface de l'implémentation. Cependant, vous n'auriez pas besoin d'IMySort. –
Oui mais IList n'implémente pas AddAndSort, d'où l'interface supplémentaire. Sauf si vous avez ignoré AddAndSort, et à chaque ajout, le trier. Ensuite, il serait interchangeable avec IList – PostMan
Vous pouvez étendre List
de sorte que la méthode Add
effectue une recherche binaire pour trouver l'emplacement d'insertion correct, puis l'ajouter à cet emplacement. Cela devrait donner de meilleures performances que de surcharger Add
pour ajouter puis trier la liste. (BTW, Sort
utilise Quicksort, qui ne donne pas nécessairement une grande performance pour ce cas.)
- 1. Commander comme une liste mais l'accès par une clé?
- 2. texte jQuery() d'appel conserve dans Firefox, mais les nouvelles lignes pas dans IE
- 3. Chaîne fractionnée C# mais conserve les caractères/séparateurs fractionnés
- 4. Dictionnaire avec une liste <> comme TValue
- 5. recherche une liste <>
- 6. Comment détecter les répétitions dans une liste de chaînes?
- 7. Initialiseur désigné, conserve les paramètres?
- 8. commande d'arbre comme une regex, mais sans les fichiers cachés
- 9. Comment analyser rapidement une liste de chaînes
- 10. Concat toutes les chaînes à l'intérieur d'une liste <string> en utilisant LINQ
- 11. Comment remplir une liste <string> en XAML?
- 12. Comment puis-je détecter les sous-chaînes communes dans une liste de chaînes
- 13. Comment trier une liste de chaînes?
- 14. Est-il possible d'avoir une liste <string> comme propriété sur une classe d'enregistrement active
- 15. Quelque chose comme mapM, mais pour les tableaux? (comme arrayMap, mais mappage d'une fonction impure)
- 16. Est-ce que tous les moteurs de navigateur traitent "\ <" comme "<" and "\>" comme ">"?
- 17. Collections.emptyList() retourne une liste <Object>?
- 18. Optimiser une liste <T> .Sort (Comparer)
- 19. Codes C# pour obtenir une liste de chaînes comme A à Z?
- 20. Reliure Telerik RadGrid à une liste <string> objet
- 21. Comment exposer std :: vector <int> comme une liste Python en utilisant SWIG?
- 22. Quelques problèmes avec l'envoi de la liste <T> comme IEnumerable <T> à une méthode
- 23. Comment mélanger une liste <T>
- 24. Valeur de retour pour une fonction << operator d'une classe de chaînes personnalisée en C++
- 25. puis-je traiter un flowlayoutpanel comme une zone de liste
- 26. Liste de chaînes dans SqlCommand via les paramètres de C#
- 27. Test pour la liste <T> appartenance à une liste <T>
- 28. Est-ce que IEnumerable <TSource> Concat <TSource> conserve l'ordre des éléments?
- 29. Liste <Rectangle> - se comporte comme il ya une boxe
- 30. caractères Échapper dans les chaînes javascript
Je veux qu'il commence vide et rester triée chaque fois que j'Ajouter. – JoelFan
Juste pour clarifier: est-ce que vous mettez seulement des choses dans la liste qui peuvent être automatiquement triées, ou devez-vous être capable de transmettre quelque chose qui définit comment trier? –
cordes, donc rien ne doit être passé dans – JoelFan