Nécessite Linq
et de parcourir toute la liste.
IEnumerable<KeyValuePair<FlowLayoutPanel, IHMPanel>> items = liste.Where(f => f.Value.Name.StartsWith("Plop"));
Si une fonction renvoie un KeyValuePair, il peut être nécessaire de renvoyer la valeur null. Mais KeyValuePair ne peut pas. A la place, il faut utiliser default(KeyValuePair<T,U>)
et ensuite comparer la valeur de retour avec retour.Equals(default(KeyValuePair<T,U>))
.
La classe (ici, une structure)
private struct KeyIni { public string Section; public string Key; }
La fonction de comparaison, avec x
la nouvelle valeur et y
la valeur à comparer. Pour insérer x
avant y
, il faut renvoyer -1, pour insérer x
après y
, il faut renvoyer 1 et si x
est identique à y
, il faut renvoyer 0. Si cette fonction renvoie 0, une exception de type ArgumentException
sera déclenchée.
private class SortKeyIni : IComparer<KeyIni> { public int Compare(KeyIni x, KeyIni y) { // On compare x par rapport à y. int compareVal = x.Section.CompareTo(y.Section); // Est-ce que les sections sont différentes ? if (compareVal != 0) { return compareVal; } // Si les sections sont différentes, on compare les clés. else { return x.Key.CompareTo(y.Key); } } }
Déclaration du dictionnaire trié.
SortedDictionary<KeyIni, string> keyPairs = new SortedDictionary<KeyIni, string>(new SortKeyIni());