J'ai un dictionnaire qui consiste en une chaîne en tant que clés et en bool en valeur comme
[{1,1 True}]
[{5,1 True}]
[{5,2 True}]
[{2,4 True}]
Voici comment j'ajoute des valeurs dans le dictionnaire.
string DictKey = (j +","+ (iPageIndex - 1)).ToString();
PageVersusRowCheckboxStatus.Add(DictKey, true);
Maintenant, je dois parcourir les valeurs résultantes du dictionnaire en fonction de la deuxième valeur de la clé.Pour eaxmple, dans le dictionnaire ci-dessus, 1,1 et 5,1 sont les clés.
Existe-t-il un moyen de faire une boucle sur la base de la deuxième valeur de la clé partagée ci-dessus, c'est-à-dire et d'obtenir la première, c'est-à-dire 1 et 5 respectivement.
Faites une boucle PageVersusRowCheckboxStatus.Keys
et divisez chacun d'eux. Cependant, vous feriez probablement mieux d'utiliser Tuple<int,int>
comme type de clé au lieu de chaîne:
Dictionary<Tuple<int, int>, bool> PageVersusRowCheckboxStatus =
new Dictionary<Tuple<int, int>, bool>();
//...
var DictKey = new Tuple<int, int>(j, iPageIndex - 1);
PageVersusRowCheckboxStatus.Add(DictKey, true);
var q =
PageVersusRowCheckboxStatus.Keys
.Where(t => t.Item2 == 1)
.Select(t => t.Item1);
Si vous utilisez une chaîne et que vous la divisez tout le temps, votre code est encombré de trucs bizarres, et chaque fois que vous devez gérer les deux parties de la clé, vous devez vous rappeler comment fonctionne le fractionnement. C'est plus facile à écrire, plus facile à déboguer et plus facile à gérer si vous utilisez une classe qui a deux propriétés int.
Voici une question, cependant: que faites-vous avec les valeurs booléennes dans le dictionnaire? Si vous les placez simplement comme espace réservé, vous feriez peut-être mieux d'utiliser
List<Tuple<int, int>>
Ou alors
HashSet<Tuple<int, int>>
@ORMapper souligne que si l'hyper-efficacité n'est pas un gros problème (et ce n'est très, très souvent pas), cela pourrait être très simple et efficace:
List<Tuple<int, int, bool>>
Si vous recherchez uniquement les éléments par index de page, vous ne tirez aucun avantage de l'utilisation d'un dictionnaire. Vous pouvez parcourir toutes les clés, mais vous ne pouvez pas rechercher de valeurs par clé partielle. En fait, il est possible que ce soit ce que vous voulez:
var dict = new PageVersusRowCheckboxStatus();
dict.SetRowStatus(2, 1, true);
dict.SetRowStatus(2, 5, true);
dict.SetRowStatus(3, 5, true);
dict.SetRowStatus(4, 2, true);
// ...
// Here's how to do the query that returns ( 1, 5 ) for page index key 1
int pageIndexKey = 1;
if (dict.ContainsKey(pageIndexKey))
{
foreach (int row in dict[pageIndexKey].Keys)
{
// Do something
}
}
// ...
public class RowStatusDictionary : Dictionary<int, Dictionary<int, bool>>
{
public void SetRowStatus(int pageIndex, int row, bool status)
{
Dictionary<int, bool> rowStatuses = null;
int pageIndexKey = pageIndex - 1;
if (!this.TryGetValue(pageIndexKey, out rowStatuses))
{
this[pageIndexKey] = new Dictionary<int, bool>();
}
rowStatuses[row] = status;
}
public bool GetRowStatus(int pageIndex, int row)
{
Dictionary<int, bool> rowStatuses = null;
int pageIndexKey = pageIndex - 1;
if (TryGetValue(pageIndexKey, out rowStatuses))
{
return rowStatuses[row];
}
return false;
}
}
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots