Meilleure mise en œuvre pour la Valeur de la Clé de la Paire de Structure de Données?
Donc j'ai été farfouillé avec C# un peu ces derniers temps, et tous les Génériques des Collections m'ont un peu confus. Dire que j'ai voulu représenter une structure de données où le chef de l'arbre a une valeur de clé de paire, et puis il y a une option de la liste de paires clé-valeur en dessous (mais pas plus de niveaux que ces). Serait-ce adapté?
public class TokenTree
{
public TokenTree()
{
/* I must admit to not fully understanding this,
* I got it from msdn. As far as I can tell, IDictionary is an
* interface, and Dictionary is the default implementation of
* that interface, right?
*/
SubPairs = new Dictionary<string, string>();
}
public string Key;
public string Value;
public IDictionary<string, string> SubPairs;
}
Il n'y a vraiment qu'un simple shunt pour la transmission des données.
Vous devez vous connecter pour publier un commentaire.
Il existe un Type de Données appelé KeyValuePair, comme ce
using NameValuePair = System.Collections.Generic.KeyValuePair<string, string>;
près du haut de chaque fichier qui a besoin d'un(string, string)
struct. Si je l'ai trouvé plus pratique de créer unclass NameValuePair
dans mon espace de noms:public class NameValuePair { KeyValuePair<string, string> it; public NameValuePair( string name, string value ) { it = new KeyValuePair<string, string>( name, value ); } public string Name { get { return it.Key; } } public string Value { get { return it.Value; } } }
Une chose que vous pourriez faire est d'utiliser le Dictionnaire d'objet tout droit sorti de la boîte, et puis il suffit de l'étendre avec vos propres modifications:
Cela vous donne l'avantage de ne pas avoir à respecter les règles de IDictionary pour votre Clé (par exemple, la clé d'unicité, etc).
Et que vous avez obtenu le concept du constructeur droite 🙂
Je pense que ce que vous pourriez être après (comme un littéral de la mise en œuvre de votre question), est:
Vous avez réellement dire une "liste" des valeurs-clés dans votre question, alors vous pourriez souhaitez changer de l'intérieur
IDictionary
avec un:Il y a un KeyValuePair type intégré. Comme une question de fait, c'est ce que le IDictionary est de vous donner accès à lorsque vous parcourez en elle.
Aussi, cette structure est à peine un arbre, trouver un plus grand représentant le nom peut être un bon exercice.
Juste une chose à ajouter à ce sujet (bien que je ne pense que vous avez déjà eu la réponse à votre question par d'autres). Dans l'intérêt de l'extensibilité (car nous savons tous qu'il va arriver à un certain point) vous pouvez vérifier le Diagramme Composite C'est idéal pour travailler avec des "Structures arborescentes"..
Comme je l'ai dit, je sais que vous êtes seulement attendais un sous-niveau, mais cela pourrait être vraiment utile pour vous si vous avez besoin plus tard d'étendre ^_^
@Jay Mooney: Un Dictionnaire générique classe .NET est en fait une table de hachage, juste avec des types fixes.
Le code que vous avez indiqué ne devrait pas convaincre quiconque de l'utiliser à la table de hachage au lieu de Dictionnaire, puisque les deux morceaux de code peut être utilisé pour les deux types.
Pour table de hachage:
Pour le dictionnaire:
Et de la même de l'autre avec KeyValuePair, il suffit d'utiliser la non-générique version de la table de hachage, et la version générique du Dictionnaire.
Il est donc tout aussi facile dans les deux sens, mais la table de hachage utilise l'Objet pour à la fois la clé et la valeur, ce qui signifie que vous recevrez une boîte de tous les types de valeur, et vous n'avez pas de type de sécurité, et le Dictionnaire utilise des types génériques et est donc mieux.
Dictionnaire De La Classe est exactement ce que vous voulez, de les corriger.
Vous pouvez déclarer le terrain directement en tant que Dictionnaire, au lieu de IDictionary, mais c'est à vous de voir.
Utiliser quelque chose comme ceci:
C'est moche, mais je pense que ça va vous donner ce que vous voulez. Trop mauvais KeyValuePair est scellé.