假設我有多個部分的問題列表和每個問題有一個像1
,1a
,1b
,2
,2a
等一個QuestionNumber。我想使用linq-to-entities從數據庫中提取問題列表,但是按QuestionNumber排序。問題是,而不是用正確的順序,它將使用字典序像C#字母順序號碼列表
1
11
11a
11b
1a
1b
2
22
我至今是一個自定義比較:
public class QuestionCompare : IComparer<Question>
{
public int Compare(Question x, Question y)
{
string a = x.QuestionNumber;
string b = y.QuestionNumber;
if (a == b)
{
return 0;
}
int aInt;
bool aBool = Int32.TryParse(new String(a.Where(Char.IsDigit).ToArray()), out aInt);
int bInt;
bool bBool = Int32.TryParse(new String(b.Where(Char.IsDigit).ToArray()), out bInt);
if (aBool)
{
if (bBool)
{
if (aInt > bInt)
{
return 1;
}
else if (aInt < bInt)
{
return -1;
}
else
{
string aLetter = new String(a.Where(Char.IsLetter).ToArray());
string bLetter = new String(a.Where(Char.IsLetter).ToArray());
return StringComparer.CurrentCulture.Compare(aLetter, bLetter);
}
}
else
{
return 1;
}
}
else
{
if (bBool)
{
return -1;
}
else
{
return StringComparer.CurrentCulture.Compare(a, b);
}
}
return 0;
}
}
你可以叫Array.Sort(questionArray,new QuestionCompare())
把問題按正確的順序。
但是,我覺得這是一個常見的定義良好的順序,所以我想知道是否有更好的實現,甚至可能是內置到.Net框架中的東西。
這是自然排序,因此,如果您使用排序列表每例將進行排序這種方式,甚至使用的Array.Sort(陣列)超載 –
Gusman
@Gusman我覺得OP意識到。這是問題和自定義比較器的原因。 – ryanyuyu
閱讀他最後的聲明:*「但是,我覺得這是一個常見的定義良好的順序,所以我想知道是否有更好的實現,甚至可能是內置到.Net框架中的東西。」* – Gusman