Sử dụng IComparer hast những bất lợi lớn của việc lặp lại tính toán khá đắt tiền rất thường xuyên, vì vậy tôi nghĩ precalculating một criterium trật tự sẽ là một ý tưởng hay:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ChapterSort
{
class Program
{
static void Main(string[] args)
{
String[] chapters=new String[] {"14.1","14.4.2","14.7.8.8.2","14.10","14.2","14.9","14.10.1.2.3.4","14.1.2.3" };
IEnumerable<String> newchapters=chapters.OrderBy(x => new ChapterNumerizer(x,256,8).NumericValue);
foreach (String s in newchapters) Console.WriteLine(s);
}
}
public class ChapterNumerizer
{
private long numval;
public long NumericValue {get{return numval;}}
public ChapterNumerizer (string chapter,int n, int m)
{
string[] c = chapter.Split('.');
numval=0;
int j=0;
foreach (String cc in c)
{
numval=n*numval+int.Parse(cc);
j++;
}
while (j<m)
{
numval*=n;
j++;
}
}
}
}
Nguồn
2012-01-23 13:15:12
Tôi nghĩ câu trả lời được chấp nhận [ở đây] (http://stackoverflow.com/questions/6248039/how-to-sort-list-of-ip-addresses-using-c-sharp) cũng hợp lệ cho trường hợp của bạn. Mặc dù bạn sẽ bị giới hạn ở bốn "cấp độ". –
trông khá đẹp, 4 cấp độ - ok. Ý tưởng cho nhiều hơn vẫn sẽ được tốt đẹp :) – Harry