J'ai une liste de keyValuePairs et trié comme ceci (décroissant par clé) p> Je peux trouver le total le plus élevé Valeur avec p> (^ peut-être peut être utilisé pour la requête suivante?) P> Je voudrais séparer les clés de ma liste telle que je peut trouver des valeurs qui répondent à une condition dans la plage spécifiée de clés. P> IE Je souhaite trouver la valeur la plus élevée et la valeur la plus basse dans une plage de touches (int) p> Je ne sais pas si c'est du tout sur la bonne voie. Je suis nouveau à la programmation et à la programmation de KeyValuePairs. Toute aide que vous pouvez offrir sur cette question est très appréciée! Merci! P> p>
3 Réponses :
Vous n'avez pas besoin de trier - vous pouvez le faire avec Linq (ajout à l'aide de system.linq; code> en haut de votre fichier .cs). Vous voulez juste un où code> filtrer par clé et un max code> pour obtenir la valeur la plus élevée:
Rechercher la valeur max dans une plage spécifiée de clés pourrait être résolue à l'aide de LINQ ( L'approche: p> Vous pouvez adapter et étendre la requête également avec plus de contrôles et de contraintes. Certaines requêtes de base sont décrites dans Opérations de requête de base de Linq (C #) . P> P> à l'aide de system.linq; code>) comme ceci:
où code> Pour filtrer tous les éléments avec la touche de la plage li>
max code> pour obtenir la valeur max li>
ol>
en utilisant system.linq; code> est requis.
Comme d'autres ont suggéré que cela soit assez facile à voir avec Linq. Voici un autre échantillon d'appels de Linq, y compris comment créer une recherche de partition.
var hitCoord = new List<KeyValuePair<int, double>>()
{
new KeyValuePair<int, double>(1, 1.1),
new KeyValuePair<int, double>(1, 1.2),
new KeyValuePair<int, double>(2, 2.0),
new KeyValuePair<int, double>(2, 2.1)
};
var partitions = hitCoord.ToLookup(kvp => kvp.Key % 2);
var maxKvp = hitCoord.Max(kvp => kvp.Key);
var minKvp = hitCoord.Min(kvp => kvp.Key);
int lower = 1;
int higher = 2;
var maxInRange = hitCoord.Where(kvp => kvp.Key >= lower && kvp.Key <= higher).Max(kvp => kvp.Key);
Essayez quelque chose comme ceci: keyvaluepair résultat = hitcoord.where (x => (x.key> 0) && (x.key <100)) .Prassé (x => x.value) .firstordfault (). ;