如何从字符串中提取数字并使用linq排序
本文关键字:linq 排序 数字 提取 字符串 | 更新日期: 2023-09-27 18:16:09
其实我不懂LINQ
我有以下数据
201305 par60
201305 par3
201306标准杆4杆
201305 par7
201305 par8
201305 par9
201305 par10
201312 par50
输出
201305 par3
201306标准杆4杆
201305 par7
201305 par8
201305 par9
201305 par10
201312 par50
201305 par60
并根据最后一个数字
对数据进行排序即201305标准 3
201306标准 4
7 201305 par
201305面值8
201305标准 9
201305面值10
201312面值50
60 201305 par
var result1 = from s in strings
select new
{
Original = s,
Sort = s.Substring(s.IndexOf("PAR") + 3),
}
var result2 = from r in result1
orderby r.Sort
select r.Original;
当然这可以简化一点
var result = from s in strings
orderby int.Parse(s.Substring(s.IndexOf("PAR") + 3))
select s;
这并没有直接回答问题,但是如果您希望解决方案易于维护和扩展,您可能需要考虑为这些创建一个类。
public class Par
{
public DateTime Date { get; private set; }
public int Index { get; private set; }
public Par(string input)
{
// define 'Date' using the first 6 chars of input
// define 'Index' using @SchlaWiener's method
}
}
之后你可以很容易地这样做:
var result = from par in myParList
orderby par.Date, par.Index
select par;
将对这个进行排序:
2013 01 PAR2
2013 02 PAR1
2013 01 PAR1
:
2013 01 PAR1
2013 01 PAR2
2013 02 PAR1
或者您可以使用orderby par.Index, par.Date
来实现此目的:
201301标准 1
201302标准 1
201301标准 2