Is there some way to use IComparer with ArrayList.Sort() to sort a group of strings as ints?
+6
A:
Sure. Just create the appropriate comparer that does the 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);
}
JaredPar
2009-07-24 17:32:34
That's what I was about to answer!
Meta-Knight
2009-07-24 17:33:02
+5
A:
If they are all strings, why are you using an ArrayList? If you're on .Net 2.0 or later, List<string>
is a much better choice.
If you're on .Net 3.5 or later:
var result = MyList.OrderBy(o => int.Parse(o.ToString() ) ).ToList();
Joel Coehoorn
2009-07-24 17:33:14
A:
A slight variation based on Joel's solution
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);
}
Abhijeet Patel
2009-07-25 18:28:08