我在列表视图中有几列,但我只是想要一种逻辑排序方法,以按字母顺序和数字顺序对项目进行排序。因为在数值的情况下 我想要一个专栏内容,例如:
111 13 442 23 214
是:
13 23 111 214 442
我当前的排序类看起来像这样:
class itemsorter:IComparer
{
public int compare (object a, object b)
{
return string.compare(((lvitem)a).text,((lvitem)b).text));
}
}
答案 0 :(得分:1)
在进行比较之前将字符串解析为数字,在这种情况下,您只需返回2个数字的差异作为compare
方法的结果。
听起来你仍然想要对字母和数字值进行排序,这必须是与上述相结合的混合方法 - 这样数字按数字排序,字母数字按字母顺序排序。您只需要选择哪个优先,这样数字或字母值始终是第一位的 - 这是维持稳定和反思排序所必需的。 (例如,如果a
是一个数字,b
是非数字,则返回1.如果a
是非数字,b
是一个数字,返回-1。否则,它们必须是相同的类型,然后您可以按照特定类型的排序。)
答案 1 :(得分:0)
正如ziesemer所说,你可以把我的示例代码如下所示,希望这会给你一个帮助。
class itemsorter : IComparer
{
public int compare(object a, object b)
{
int resultA, resultB;
bool markA = int.TryParse(((lvitem)a).text, out resultA);
bool markB = int.TryParse(((lvitem)b).text, out resultB)
// They are number.
if (markA && markB)
{
if (resultA > resultB)
return 1;
else if (resultA < resultB)
return -1;
else
return 0;
}
// a can convert to number,
// b can't.
if (markA && !markB)
{
return 1;
}
// b can convert to number,
// a can't.
if(!markA && markB)
{
return -1;
}
}
}