Je cherche une structure qui contient un jeu de double valeurs trié. Je veux interroger cet ensemble pour trouver la valeur la plus proche d'une valeur de référence spécifiée.
J'ai examiné la catégorie Conditions: p> i Utilisez actuellement le code suivant, où < Strong> Puis-je faire plus vite? strong> p> Je ne suis pas sûr de 100% sûr, si ce code est vraiment sûr. p. Je sais qu'il existe de nombreuses questions similaires, mais aucune ne répond à mes besoins spécifiques. Surtout, il y a ce structure de données C # Dictionnaire mais sans valeur , mais le questionneur veut simplement vérifier l'existence de ne rien trouver. em> p> p> p> tritedlist
triéValues code> est le suivi précitée
sortidlist code> p>
IEnumerable code>, le type de retour de ma requête n'est plus défini par définition. Toutefois, un test d'unité avec une base de données de test importante a montré que c'est en pratique, cela fonctionne donc pour moi. Avez-vous des notes concernant cet aspect? P>
3 Réponses :
La façon dont vous le faites est incroyablement lente car elle doit rechercher dès le début de la liste à chaque fois donnant O (n) performance. P>
Un meilleur moyen est de mettre les éléments dans une liste, puis Trier une> la liste. Vous dites que vous n'avez pas besoin de changer le contenu une fois initialisé, alors le tri une fois suffit. P>
Ensuite, vous pouvez utiliser de la DOCS: P>
Valeur de retour P>
L'indice zéro de
Article dans la liste Une fois que vous avez le point d'insertion, vous devez vérifier les éléments de chaque côté pour voir ce qui est le plus proche. P> Liste
pour trouver des éléments ou trouver le point d'insertion d'un élément s'il n'existe pas déjà dans la liste. P>
triée
Dépend de la fréquence à laquelle vous souhaitez trouver un élément le plus proche contre la fréquence à laquelle la liste est actualisée.
Voir la question. La liste n'aura jamais d'insertions ni de déménagements.
WOW, parlez de la violation de valeurs de retour.
Mark, ur da homme! Cela exécute environ 200 fois plus vite que ma version fournie.
Pourriez-vous ne pas vous être utile en ce moment, mais .net 4 a un SITEDSET classe dans la BCL. P>
Comment utiliser un tri pour trouver l'élément le plus proche dans le cas où l'élément exact n'existe pas?
De la même manière qu'il le fait actuellement. Je ne répondais pas à l'aspect de la question de la question, car vous avez déjà répondu. Ma réponse était destinée à pointer l'OP à une structure de données non KVP qu'il pourrait trouver utile.
Je pense que cela peut être plus élégant comme suit: Si vos articles ne sont pas triés:
double nearest = values.OrderBy(x => x.Key).Last(x => x.Key <= requestedValue);
Ce serait plus élégant, mais pas plus rapide que j'ai demandé. -1 pour ne pas répondre à la question.