日期:2014-05-17  浏览次数:20375 次

求个 比较大小
0001.0002.0005.0012.0015
0001.0002.0005.0012.0017
0001.0002.0005.0011.0015
0001.0002.0003.0012.0015


比较的顺序是
0001.0002.0003.0012.0015
0001.0002.0005.0011.0015
0001.0002.0005.0012.0015
0001.0002.0005.0012.0017


------解决方案--------------------
如果位数固定的话,直接linq就可以解决了
------解决方案--------------------
把 点号 去掉 比较数值不可以吗?
------解决方案--------------------
string类可以直接比较啊,位数不同也可以
------解决方案--------------------
给个示例

string data = "0001.0003.0009.002.0015";
List<string> datas = data.Split('.').ToList<string>();
datas.Sort(delegate(string str1, string str2)
{
    int x = int.Parse(str1);
    int y = int.Parse(str2);
    return Comparer.Default.Compare(x, y);
});

------解决方案--------------------
引用:
给个示例

string data = "0001.0003.0009.002.0015";
List<string> datas = data.Split('.').ToList<string>();
datas.Sort(delegate(string str1, string str2)
{
    int x = int.Parse(str1);
    int y = int.Parse(str2);
    return Comparer.Default.Compare(x, y);
});


有必要转么?

好像string可以直接比的吧~~
------解决方案--------------------
引用:
Quote: 引用:

给个示例

string data = "0001.0003.0009.002.0015";
List<string> datas = data.Split('.').ToList<string>();
datas.Sort(delegate(string str1, string str2)
{
    int x = int.Parse(str1);
    int y = int.Parse(str2);
    return Comparer.Default.Compare(x, y);
});


有必要转么?

好像string可以直接比的吧~~

LZ可以自行选择。从LZ贴出的数据看,数据是数值型的。所以转一下比较好
可以给个参考:
数据比较结果:0001.002,0003.0009.0015
字符串比较结果:0001,0003,0009,015,002
------解决方案--------------------
放List排序后就可以了嘛
------解决方案--------------------
List<string> data = new List<string>() 

    "0001.0002.0005.0012.0015",
    "0001.0002.0005.0012.0017",
    ...
};
var query = data.OrderBy(x => x.Split('.')[0])
    .ThenBy(x => x.Split('.')[1])
    .ThenBy(x => x.Split('.')[2])
    .ThenBy(x => x.Split('.')[3])
    .ThenBy(x&n