例如,集合是这样的:
strList = new List<string>() {
"1","10","11","12","13","14","15","16",
"17","18","19","2","20","21","22","23",
"3","4","5","6","7","8","9"
};
使用sort()排序后是这样的顺序:1,10,11,12,13,14,15,16,17,18,19,2,20,21,22,23,3,4,5,6,7,8,9
而我想要的顺序是:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
请问:该如何实现?
30 个解决方案
#1
自定义排序咯
#2
Sort(Int32, Int32 IComparer(T))
#3
你是字符串类型啊,当然根据字符串的规则进行排序。
sort有几个重载方法的啊,你去实现它的Icomparer方法就可以了。
sort有几个重载方法的啊,你去实现它的Icomparer方法就可以了。
#4
这个是你是字符串,所以会按ascii码来排序,如果你确认里面的元素都是是数字的,你就干脆都用int类型的吧,或者非要用字符串的话,你就补一下零就可以了,比如说1变成01
#5
给我写点代码吧,否则我还是会云里雾里的,不知道该怎么办呀
#6
#7
急用呀,请高手路过出手相助呀
#8
static void Main(string[] args)
{
List<string> strList = new List<string>() { "1", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21", "22", "23", "3", "4", "5", "6", "7", "8", "9" };
strList.Sort( new Comp());
foreach (string s in strList)
{
Console.WriteLine(s);
}
Console.ReadKey();
}
private class Comp : Comparer<string>
{
public override int Compare(string x, string y)
{
return int.Parse(x) - int.Parse(y);
}
}
#9
List<string> strList = new List<string>() { "1", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21", "22", "23", "3", "4", "5", "6", "7", "8", "9" };
strList.Sort( delegate(string str1, string str2) { return int.Parse(str1) - int.Parse(str2); } );
#10
List<string> strList = new List<string>(new string[] { "1", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21", "22", "23", "3", "4", "5", "6", "7", "8", "9" });
strList.Sort((Comparison<string>)delegate(string a, string b)
{
return int.Parse(a).CompareTo(int.Parse(b));
});
strList 就是按你要求排序后的。vs2005起支持以上语法。更高级的vs可以用linq
#11
List<String> values = new List<string>(new String[]{
"1", "10", "11", "12", "13", "14", "15", "16",
"17", "18", "19", "2", "20", "21", "22", "23",
"3", "4", "5", "6", "7", "8", "9"});
values.Sort(delegate(String value1, String value2) {return Int32.Parse(value1).CompareTo(Int32.Parse(value2)); });
//直接用delegate吧,如果这个IComparer不在别的地方使用
#12
这是什么东东
#13
饺子你来晚了,没必要转Comparison <string>的
我的代码测试通过的
匿名函数而已~
#14
Console.WriteLine(String.Join(",",values.ToArray()));
//结果:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
#15
囧。跟同事说话,一转眼,点提交才看到。。
#16
定义成strList = new List <int>() { 1,10,11,12,13,14,15,16, 17,18,19,2,20,21,22,23, 3,4,5,6,7,8,9 };
#17
linq简单
strList = strList.OrderBy(s => int.Parse(s)).ToList();
strList = strList.OrderBy(s => int.Parse(s)).ToList();
#18
谢谢大家,方法越多越好!!
#19
出错了,
如果集合是这样的没问题:
但是如果集合是这样的就会出错,该怎么解决呢?
如果集合是这样的没问题:
List<String> values = new List<string>(new String[]{
"1", "10", "11", "12", "13", "14", "15", "16",
"17", "18", "19", "2", "20", "21", "22", "23",
"3", "4", "5", "6", "7", "8", "9"});
但是如果集合是这样的就会出错,该怎么解决呢?
strList = new List<string>() {
"abs","wds","cfs","bfe","ytd","xwz","pjg","itf"
};
#20
int.Parse改为int.TryParse
#21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<string> strList = new List<string>() { "1", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21", "22", "23", "3", "4", "5", "6", "7", "8", "9" };
List<int> intList = new List<int>();
for (int i = 0; i < strList.Count; i++)
{
intList.Add(Convert.ToInt32(strList[i]));
}
for (int i = 0; i < intList.Count; i++)
{
for (int j = 0; i < intList.Count - j - 1; j++)
{
int Temp;
if (intList[j] > intList[j+1])
{
Temp = intList[j];
intList[j] = intList[j + 1];
intList[j + 1] = Temp;
}
}
}
string str = "";
for (int i = 0; i < intList.Count; i++)
{
str += intList[i].ToString() + ",";
}
Console.Write(str.TrimEnd(','));
Console.ReadLine();
}
}
}
#22
List<string> strList = new List<string>(new string[] { "1", "10", "11", "12", "abs", "wds", "cfs", "bfe", "ytd", "xwz", "pjg", "itf", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21", "22", "23", "3", "4", "5", "6", "7", "8", "9" });
strList.Sort(delegate(string a, string b)
{
string ia = Regex.Match(a, @"\d+$").Value;
string ib = Regex.Match(b, @"\d+$").Value;
return (ia != "" && ib != "") ? int.Parse(a) - int.Parse(b) : string.Compare(a, b);
});
#23
如果说都是数字的话,可以按照上面的方法,将其填充到List<int>中,然后进行排序,不如不是纯数字的话,系统将会自动进行ASCII编码方式输出。
#24
#25
谢谢各位了,正在解决问题,稍后结贴,稍安勿躁!!!!
#26
实现一个Comparetor接口就可以了。。。
#27
打酱油
#28
为什么 return int.Parse(str1) - int.Parse(str2); 就可以排序了呢? 什么原理?
#29
lst.Sort(delegate(string s1, string s2) { return int.Parse(str1).CompareTo(int.Parse(str1)); });
#30
我也一直对那几个接口很纠结
#1
自定义排序咯
#2
Sort(Int32, Int32 IComparer(T))
#3
你是字符串类型啊,当然根据字符串的规则进行排序。
sort有几个重载方法的啊,你去实现它的Icomparer方法就可以了。
sort有几个重载方法的啊,你去实现它的Icomparer方法就可以了。
#4
这个是你是字符串,所以会按ascii码来排序,如果你确认里面的元素都是是数字的,你就干脆都用int类型的吧,或者非要用字符串的话,你就补一下零就可以了,比如说1变成01
#5
给我写点代码吧,否则我还是会云里雾里的,不知道该怎么办呀
#6
#7
急用呀,请高手路过出手相助呀
#8
static void Main(string[] args)
{
List<string> strList = new List<string>() { "1", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21", "22", "23", "3", "4", "5", "6", "7", "8", "9" };
strList.Sort( new Comp());
foreach (string s in strList)
{
Console.WriteLine(s);
}
Console.ReadKey();
}
private class Comp : Comparer<string>
{
public override int Compare(string x, string y)
{
return int.Parse(x) - int.Parse(y);
}
}
#9
List<string> strList = new List<string>() { "1", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21", "22", "23", "3", "4", "5", "6", "7", "8", "9" };
strList.Sort( delegate(string str1, string str2) { return int.Parse(str1) - int.Parse(str2); } );
#10
List<string> strList = new List<string>(new string[] { "1", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21", "22", "23", "3", "4", "5", "6", "7", "8", "9" });
strList.Sort((Comparison<string>)delegate(string a, string b)
{
return int.Parse(a).CompareTo(int.Parse(b));
});
strList 就是按你要求排序后的。vs2005起支持以上语法。更高级的vs可以用linq
#11
List<String> values = new List<string>(new String[]{
"1", "10", "11", "12", "13", "14", "15", "16",
"17", "18", "19", "2", "20", "21", "22", "23",
"3", "4", "5", "6", "7", "8", "9"});
values.Sort(delegate(String value1, String value2) {return Int32.Parse(value1).CompareTo(Int32.Parse(value2)); });
//直接用delegate吧,如果这个IComparer不在别的地方使用
#12
这是什么东东
#13
饺子你来晚了,没必要转Comparison <string>的
我的代码测试通过的
匿名函数而已~
#14
Console.WriteLine(String.Join(",",values.ToArray()));
//结果:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
#15
囧。跟同事说话,一转眼,点提交才看到。。
#16
定义成strList = new List <int>() { 1,10,11,12,13,14,15,16, 17,18,19,2,20,21,22,23, 3,4,5,6,7,8,9 };
#17
linq简单
strList = strList.OrderBy(s => int.Parse(s)).ToList();
strList = strList.OrderBy(s => int.Parse(s)).ToList();
#18
谢谢大家,方法越多越好!!
#19
出错了,
如果集合是这样的没问题:
但是如果集合是这样的就会出错,该怎么解决呢?
如果集合是这样的没问题:
List<String> values = new List<string>(new String[]{
"1", "10", "11", "12", "13", "14", "15", "16",
"17", "18", "19", "2", "20", "21", "22", "23",
"3", "4", "5", "6", "7", "8", "9"});
但是如果集合是这样的就会出错,该怎么解决呢?
strList = new List<string>() {
"abs","wds","cfs","bfe","ytd","xwz","pjg","itf"
};
#20
int.Parse改为int.TryParse
#21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<string> strList = new List<string>() { "1", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21", "22", "23", "3", "4", "5", "6", "7", "8", "9" };
List<int> intList = new List<int>();
for (int i = 0; i < strList.Count; i++)
{
intList.Add(Convert.ToInt32(strList[i]));
}
for (int i = 0; i < intList.Count; i++)
{
for (int j = 0; i < intList.Count - j - 1; j++)
{
int Temp;
if (intList[j] > intList[j+1])
{
Temp = intList[j];
intList[j] = intList[j + 1];
intList[j + 1] = Temp;
}
}
}
string str = "";
for (int i = 0; i < intList.Count; i++)
{
str += intList[i].ToString() + ",";
}
Console.Write(str.TrimEnd(','));
Console.ReadLine();
}
}
}
#22
List<string> strList = new List<string>(new string[] { "1", "10", "11", "12", "abs", "wds", "cfs", "bfe", "ytd", "xwz", "pjg", "itf", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21", "22", "23", "3", "4", "5", "6", "7", "8", "9" });
strList.Sort(delegate(string a, string b)
{
string ia = Regex.Match(a, @"\d+$").Value;
string ib = Regex.Match(b, @"\d+$").Value;
return (ia != "" && ib != "") ? int.Parse(a) - int.Parse(b) : string.Compare(a, b);
});
#23
如果说都是数字的话,可以按照上面的方法,将其填充到List<int>中,然后进行排序,不如不是纯数字的话,系统将会自动进行ASCII编码方式输出。
#24
#25
谢谢各位了,正在解决问题,稍后结贴,稍安勿躁!!!!
#26
实现一个Comparetor接口就可以了。。。
#27
打酱油
#28
为什么 return int.Parse(str1) - int.Parse(str2); 就可以排序了呢? 什么原理?
#29
lst.Sort(delegate(string s1, string s2) { return int.Parse(str1).CompareTo(int.Parse(str1)); });
#30
我也一直对那几个接口很纠结