比较的类我没有和数据类型相关,我改了一下,大致这样:public class Comparer : IComparer { private int index; public int Index { get { return index; } set { index = value; } } public int Compare(object x, object y) { object v1 = (x as object[])[index]; object v2 = (y as object[])[index]; if (v1 is string && v2 is string) { return string.Compare((string)v1, (string)v2); } if (v1 is int && v2 is int) { if ((int)v1 > (int)v2) return 1; if ((int)v1 == (int)v2) return 0; if ((int)v1 < (int)v2) return -1; } return 0; } }
或者 實現自己的比較方法MyComp()然後用Sort(MyComp)..應該都可以
第二種方法我在List上是可以的
{
base.OnClick(e); object[] ar ={ new object[] { "1", "ss", 1 }, new object[] { "11", "dd", 0 }, new object[] { "23", "ff", 4 }, new object[] { "1111", "gg", 5 } }; Comparer com = new Comparer();
com.Index = 0;
Array.Sort(ar, com);
printAr(ar); com.Index = 1;
Array.Sort(ar, com);
printAr(ar); com.Index = 2;
Array.Sort(ar, com);
printAr(ar);
}private void printAr(object[] ar)
{
for (int i = 0; i < ar.Length; i++)
{
object[] t = ar[i] as object[];
if (t != null)
{
for (int _i = 0; _i < t.Length; _i++)
{
Console.Write(t[_i]);
Console.Write("\t");
}
}
Console.WriteLine();
}
Console.WriteLine();
}
public class Comparer : IComparer
{
private int index; public int Index
{
get { return index; }
set { index = value; }
} public int Compare(object x, object y)
{
return string.Compare((x as object[])[index].ToString(), (y as object[])[index].ToString());
}
}
1 ss 1
11 dd 0
1111 gg 5
23 ff 4 11 dd 0
23 ff 4
1111 gg 5
1 ss 1 11 dd 0
1 ss 1
23 ff 4
1111 gg 5
{
private int index; public int Index
{
get { return index; }
set { index = value; }
} public int Compare(object x, object y)
{
object v1 = (x as object[])[index];
object v2 = (y as object[])[index];
if (v1 is string && v2 is string)
{
return string.Compare((string)v1, (string)v2);
}
if (v1 is int && v2 is int)
{
if ((int)v1 > (int)v2) return 1;
if ((int)v1 == (int)v2) return 0;
if ((int)v1 < (int)v2) return -1;
}
return 0;
}
}