Je veux stocker des données telles que les données
StringDoubleCollection data = new StringDoubleCollection(); data.add("apple",15); data.add("",10); double max = data.values.Max(); double min = data.values.Min();
7 Réponses :
Avez-vous regardé Recherche ? P>
Le seul problème est que c'est immuable, vous devez donc pouvoir créer votre collection en une seule fois. P>
Comme Anthony Pegram note, c'est un peu une douleur à en créer un. Cela dépend de l'endroit où vient vos données. Regardez le méthode Tolookup . < / p>
Le problème avec c'est que ce n'est pas directement instanciable. Vous commencez à partir de quelque chose d'autre et pouvez ensuite projeter dans cela. Il aurait besoin d'une structure intermédiaire d'abord.
Ouais c'est vrai. Mais il pourrait encore être possible en fonction de l'endroit où ses données proviennent (aucune information n'a été fournie). Cela vaut la peine de connaître dans tous les cas.
Vous pouvez créer une classe comme les suivantes: puis obtenir des valeurs maximales et minimales à l'aide de LINQ avec un sélecteur: P> // Inside X class...
public static implicit operator X(double d)
{
return new X(d);
}
// Somewhere else...
data.Add(50.0);
Je suis désolé, j'ai sauté la partie Duplicate i> lors de la lecture. Édité quand même :)
Ce serait une bonne idée de simplement supprimer le peu du dictionnaire plutôt que de laisser votre modification l'expliquer. Une classe d'encapsulation est une suggestion digne, alors j'ai voté la réponse.
Si cela vaut la peine de convivialiser (c'est-à-dire que vous utilisez des collections maladroites de la liste et, comme d'autres commentaires / réponses suggèrent, le cadre ne semble pas fournir un plus simple Solution qui correspond à toutes vos exigences ... p> comme pour "valeur max", je suppose que vous voulez dire la paire de la valeur de clé avec la plus grande valeur. Il peut être récupéré comme si: P> < Pré> xxx pré> p>
stringdoublecollection code>. Il ne serait pas si difficile d'envelopper la collection sous-jacente avec la syntaxe plus conviviale que vous avez décrite dans votre exemple.
Définissez simplement votre propre classe de modèle pour maintenir les données au lieu de clefvaluepair et tout devient plus propre:
using System; using System.Collections.Generic; public class Fruit { public string Name {get; set;} public double Price {get; set;} } public class Program { public static void Main() { List<Fruit> _myFruit = new List<Fruit>(); _myFruit.Add(new Fruit{Name="apple", Price=15 }); _myFruit.Add(new Fruit{Name="pear", Price=12.5 }); _myFruit.Add(new Fruit{Name="", Price=10 }); _myFruit.Add(new Fruit{Name="", Price=0.45 }); // etc... } }
Qu'en est-il de la mise en œuvre de la stringdoublecollection pour fonctionner comme si vous voulez ...
public class StringDoubleCollection { private List<KeyValuePair<string, double>> myValues; public List<double> values { get { return myValues.Select(keyValuePair => keyValuePair.Value).ToList(); } } public void add(string key, double value) { myValues.Add(new KeyValuePair<string,double>(key,value)); } }
Pour déterminer quelle structure de données que vous voulez vraiment, permet de regarder vos habitudes d'utilisation.
Un tas offre min ou em> max, mais ne conserve pas la commande. Un dictionnaire basé sur un hachage ne préserve pas la commande. Une liste est en fait un bon choix pour votre structure de données. Il est disponible et offre un excellent support. P> Vous pouvez pénétrer votre code en définissant des classes pour la structure de données et les données de votre barre. Et vous pouvez ajouter des fonctionnalités min / max à la collection. Remarque: je n'ai pas utilisé les fonctions Linq min / max, car elles renvoient la valeur minimale em>, pas le minimum élément em>. P>
Vous pouvez implémenter le dictionnaire https://docs.microsoft.com/pt-br/dotnet/api/system.collections.generic.dictionary-2?View=net -5.0 p> p>
C'est une réponse très tardive après une réponse différente a été acceptée. Il ne répond également pas à la question car la question originale a demandé quelle collecte à utiliser pour une clé à chaîne et une double valeur. Vous avez répondu à la chaîne, à la chaîne. Veuillez répondre à de vieilles questions s'ils ajoutent une nouvelle valeur et, dans ce cas, veuillez vous assurer que votre réponse répond au problème réel.
Stackoverflow a tué mon message en n'échantillant pas de "<". Donc, mes dernières remarques étaient de savoir comment obtenir la valeur maximale de la liste> et nomeucollection est agréable mais c'est une chaîne J'ai besoin d'une
Correction du formatage de vous.
Ce que vous voulez, c'est fondamentalement un dictionnaire qui permet des clés en double. Selon cette question: Stackoverflow.com/questions/146204/ ... Il n'y a rien dans le cadre qui le supporte. Vous aurez probablement besoin de faire votre propre version générique de NameValuecollection.
merci rayon de réparation