Existe-t-il un moyen d'utiliser IComparer avec ArrayList.Sort() pour trier un groupe de chaînes en tant qu'ints?Trier la matrice de chaînes en tant qu'int
1
A
Répondre
6
Bien sûr. Créez simplement le comparateur approprié qui effectue la conversion.
public class StringAsIntComparer : IComparer {
public int Compare(object l, object r) {
int left = Int32.Parse((string)l);
int right = Int32.Parse((string)r);
return left.CompareTo(right);
}
+0
Voilà ce que j'étais sur le point de répondre! –
7
S'il s'agit de toutes les chaînes, pourquoi utilisez-vous un ArrayList? Si vous êtes sur .Net 2.0 ou plus tard, List<string>
est un beaucoup mieux meilleur choix.
Si vous êtes sur .Net 3.5 ou version ultérieure:
var result = MyList.OrderBy(o => int.Parse(o.ToString())).ToList();
1
Une légère variation basée sur la solution de Joel
string[] strNums = {"111","32","33","545","1","" ,"23",null};
var nums = strNums.Where(s =>
{
int result;
return !string.IsNullOrEmpty(s) && int.TryParse(s,out result);
}
)
.Select(s => int.Parse(s))
.OrderBy(n => n);
foreach(int num in nums)
{
Console.WriteLine(num);
}
Voulez-vous dire des chaînes comme "1", "55"? – weiqure