我正在尝试在C#中按字母顺序对字符串列表进行排序。我的代码如下所示:
public static List<Result> sort(List<Result> listToSort)
{
int listSize = listToSort.Count;
for (int i = 0; i < listSize; i++)
{
for (int j = 0; j < listSize; j++)
{
if (listToSort[i].SN[0] < listToSort[j].SN[0])
{
Result tempValue = listToSort[j];
listToSort[j] = listToSort[i];
listToSort[i] = tempValue;
}
}
}
return listToSort;
}
但它只是根据字符串的第一个字母对其进行排序。换句话说,如果我有这样的列表:
唐纳德,艾比,戴夫,鲍勃,山姆,皮特
它会像这样排序:
abby,bob,donald,dave,pete,sam
人们会期待'戴夫'来到'唐纳德'之前...... 有什么想法吗?
答案 0 :(得分:3)
目前,您只按第一个字母排序,这就是您看到此结果的原因。您可以使用Enumerable.OrderBy - LINQ
List<Result> sortedList = listToSort.OrderBy(r=> r.SN).ToList();
或者对于您当前的代码,您可以将支票修改为:
if (string.Compare(listToSort[i].SN,listToSort[j].SN) < 0)
答案 1 :(得分:2)
如何使用LINQ:
return listToSort.OrderBy(report => report.SN)
我假设您的Report
类有一个string
属性,您希望列表按哪个排序?
修改强>
没有注意到你已经指定了SN
属性,修改了我的答案。
答案 2 :(得分:1)
public static List<Result> sort(List<Result> listToSort)
{
return listToSort.OrderBy(x=>x.SN[0]).ToList();
}
答案 3 :(得分:1)
看一下这部分:
for (int i = 0; i < listSize; i++)
{
for (int j = 0; j < listSize; j++)
{
if (listToSort[i].SN[0] < listToSort[j].SN[0])
{
你是
最好的办法是使用内置排序。 Linq的OrderBy(lambda)
是最简单的,但它创建了一个新列表。对于就地排序,请使用List<T>.Sort(Comparer)
。
如果您必须自己动手,请查找一个好的排序算法(维基百科)。
答案 4 :(得分:1)
你只是在评估第一个字母。尝试使用传统的排序方法:
public static void Sort(List<Result> listToSort)
{
listToSort.Sort(new ResultComparator());
}
public class ResultComparator : IComparer<Result>
{
public int Compare(Result x, Result y)
{
if (x == null && y == null) return 0;
if (x == null) return 1;
if (y == null) return 0;
// compare based in SN
return string.Compare(x.SN, y.SN);
}
}
答案 5 :(得分:1)
这是因为比较了第一个字符串的字符(listToSort [i] .SN [0] =&gt;,它产生了输入的第一个字符)。如果要比较字符串值,则应使用string.Compare()方法。
- SJ