Question simple - si l'on donne à un IList<T>
comment effectuer une recherche binaire sans écrire la méthode soi-même et sans copier les données dans un type ayant un support de recherche binaire intégré. Ma situation actuelle est la suivante.
-
List<T>.BinarySearch()
n'est pas membre deIList<T>
- Il n'existe pas d'équivalent de la
ArrayList.Adapter()
méthode pourList<T>
-
IList<T>
n'hérite pas deIList
, d'où l'utilisation deArrayList.Adapter()
n'est pas possible
J'ai tendance à croire que ce n'est pas possible avec les méthodes intégrées, mais je ne peux pas croire qu'une méthode aussi élémentaire soit absente de la BCL/FCL.
Si ce n'est pas possible, qui peut donner l'implémentation de recherche binaire la plus courte, la plus rapide, la plus intelligente ou la plus belle pour IList<T>
?
MISE À JOUR
Nous savons tous qu'une liste doit être triée avant d'utiliser la recherche binaire, vous pouvez donc supposer qu'elle l'est. Mais je suppose (sans l'avoir vérifié) que c'est le même problème avec le tri - comment trier ? IList<T>
?
CONCLUSION
Il semble qu'il n'y ait pas de recherche binaire intégrée pour les IList<T>
. On peut utiliser First()
y OrderBy()
Les méthodes LINQ pour rechercher et trier, mais il est probable que les performances en pâtissent. L'implémenter soi-même (en tant que méthode d'extension) semble être la meilleure solution.
2 votes
Vous ne pouvez pas effectuer une recherche binaire sur n'importe quelles données anciennes - elles doivent d'abord avoir été triées de manière appropriée et ne pas comporter de doublons
2 votes
Vous pouvez supposer que la liste est triée.
0 votes
Connaissez-vous le type sous-jacent de l'objet ? List<T> fournit les méthodes Sort et BinarySearch.
0 votes
C'est là le problème ... Je ne sais rien de la mise en œuvre et je ne veux pas faire d'hypothèses.
1 votes
Mais vous venez de dire que nous pouvons supposer qu'elle est réglée. Vous ne voulez donc pas faire d'hypothèses, si ce n'est qu'il est trié et qu'il supportera une recherche binaire ?
3 votes
Oui, il s'agit d'une IList<T> triée et je veux y effectuer une recherche. Je peux écrire une recherche binaire moi-même en une minute ou deux, mais j'aimerais vraiment voir une méthode intégrée.
1 votes
Cela ressemble à un oubli, il est dommage que .NET vous oblige à réinventer la roue. Nous devrions signaler ce bogue à Microsoft.
0 votes
En rapport : Existe-t-il un moyen générique d'insérer rapidement (log(n)) un élément dans n'importe quelle IList<T> ?