0
votes

Clés de partition dans la liste c #

J'ai une liste de keyValuePairs xxx

et trié comme ceci (décroissant par clé) xxx

Je peux trouver le total le plus élevé Valeur avec xxx

(^ peut-être peut être utilisé pour la requête suivante?)

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.

IE Je souhaite trouver la valeur la plus élevée et la valeur la plus basse dans une plage de touches (int) xxx

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!


1 commentaires

Essayez quelque chose comme ceci: keyvaluepair résultat = hitcoord.where (x => (x.key> 0) && (x.key <100)) .Prassé (x => x.value) .firstordfault (). ;


3 Réponses :


1
votes

Vous n'avez pas besoin de trier - vous pouvez le faire avec Linq (ajout à l'aide de system.linq; en haut de votre fichier .cs). Vous voulez juste un filtrer par clé et un max pour obtenir la valeur la plus élevée: xxx


0 commentaires

1
votes

Rechercher la valeur max dans une plage spécifiée de clés pourrait être résolue à l'aide de LINQ ( à l'aide de system.linq; ) comme ceci: xxx

L'approche:

  1. Utilisez Pour filtrer tous les éléments avec la touche de la plage
  2. Utilisez max pour obtenir la valeur max

    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 #) .


1 commentaires

en utilisant system.linq; est requis.



0
votes

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);


0 commentaires