4

是否有一个标准功能可以让我按以下方式对大写和小写字母进行排序,或者我应该实现一个自定义比较器:

student
students
Student
Students

例如:

using System;
using System.Collections.Generic;

namespace Dela.Mono.Examples
{
   public class HelloWorld
   {
      public static void Main(string[] args)
      {
         List<string> list = new List<string>();
         list.Add("student");
         list.Add("students");
         list.Add("Student");
         list.Add("Students");
         list.Sort();

         for (int i=0; i < list.Count; i++)
             Console.WriteLine(list[i]);
      }
   } 
}

它将字符串排序为:

student
Student
students
Students

如果我尝试使用list.Sort(StringComparer.Ordinal),排序如下:

Student
Students
student
students
4

2 回答 2

4

你的意思是在这些线上吗

List<string> sort = new List<string>() { "student", "Students", "students", 
                                         "Student" };
List<string> custsort=sort.OrderByDescending(st => st[0]).ThenBy(s => s.Length)
                                                         .ToList();

第一个按第一个字符排序,然后按长度排序。根据我上面提到的模式,它与您当时建议的输出相匹配,否则您将执行一些自定义比较器

于 2012-11-30T09:20:34.083 回答
1

我相信您想将那些以小写和大写开头的字符串分组,然后分别对它们进行排序。

你可以做:

list = list.Where(r => char.IsLower(r[0])).OrderBy(r => r)
      .Concat(list.Where(r => char.IsUpper(r[0])).OrderBy(r => r)).ToList();

首先选择以小写开头的字符串,对其进行排序,然后将其与以大写开头的字符串连接(排序)。所以你的代码将是:

List<string> list = new List<string>();
list.Add("student");
list.Add("students");
list.Add("Student");
list.Add("Students");
list = list.Where(r => char.IsLower(r[0])).OrderBy(r => r)
      .Concat(list.Where(r => char.IsUpper(r[0])).OrderBy(r => r)).ToList();
for (int i = 0; i < list.Count; i++)
    Console.WriteLine(list[i]);

和输出:

student
students
Student
Students
于 2012-11-30T09:24:51.877 回答