Listview项目排序

时间:2011-12-12 02:57:23

标签: c#

我在列表视图中有几列,但我只是想要一种逻辑排序方法,以按字母顺序和数字顺序对项目进行排序。因为在数值的情况下 我想要一个专栏内容,例如:

  
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));
    }
}   

2 个答案:

答案 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;
        }

    }
}