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 に答える