C#按字母顺序对字符串数组进行排序,注意将以大写字母开头的字符串放在首位。第一

时间:2018-07-13 07:00:22

标签: c# arrays string sorting alphabetical

1)有一个Kata,它声明要对字符串数组中的所有字符串进行排序,然后采用第一个单词,并在每个字母之间加上***:https://www.codewars.com/kata/sort-and-star

2)例如:

(1)给出:

bitcoin
take
over
the
world
maybe
who
knows
perhaps

(2)订购后:

bitcoin
knows
maybe
over
perhaps
take
the
who
world

(3)返回结果是:

b***i***t***c***o***i***n

3)然而,我面临的困难如下:如何表达“首先以大写字母开头的单词”?

4)我尝试了以下代码:

using System;
public class Kata
{
  public static string TwoSort(string[] s)
  {
  foreach(string str in s){
    Console.WriteLine(str);
  }
  Console.WriteLine("");
  Array.Sort(s);
  foreach(string str in s){
    Console.WriteLine(str);
  }

  Console.WriteLine("");

  string firstWord = s[0];
  string result = "";


  foreach(char letter in firstWord){
    result += letter + "***";

  }
  Console.WriteLine(result.Substring(0, result.Length - 3));
    return result.Substring(0, result.Length - 3);
  }  
}

5)例如:

(1)给出以下数组:

Lets
all
go
on
holiday
somewhere
very
cold

(2)订购后:

all
cold
go
holiday
Lets
on
somewhere
very

(3)当前错误的结果:

a***l***l

(4)预期正确的结果:

L***e***t***s

我也读过:

how to sort a string array by alphabet?

Sorting an array alphabetically in C#

3 个答案:

答案 0 :(得分:2)

您应指定比较器,例如( Linq 解决方案):

  string[] source = new string[] {
    "Lets",
    "all",
    "go",
    "on",
    "holiday",
    "somewhere",
    "very",
    "cold",
  };

  // StringComparer.Ordinal: order by Ascii values; capital letters < small letters 
  var ordered = source
    .OrderBy(item => item, StringComparer.Ordinal);

  Console.Write(string.Join(", ", ordered));

结果:

  Lets, all, cold, go, holiday, on, somewhere, very

要获得理想的结果(如果您坚持订购),可以放

  var result = string.Join("***", source
    .OrderBy(item => item, StringComparer.Ordinal) 
    .First()
    .Select(c => c)); // <- turn string into IEnumerable<char> 

  Console.Write(result);

结果:

  L***e***t***s

如果您想继续使用当前代码,请将Array.Sort(s);更改为

  Array.Sort(s, StringComparer.Ordinal);

答案 1 :(得分:1)

您可以指定序数字符串比较器以将结果用大写字母然后用小写字母缩写。

Array.Sort(s, StringComparer.Ordinal);

答案 2 :(得分:0)

如果它是一种像“名称”这样的具有特征的类,则可以使用以下内容

if (isAscend)
    List1.Sort((x, y) => x.Name.CompareTo(y.Name));
else
    List1.Sort((x, y) => -x.Name.CompareTo(y.Name));

您可以得到一个按“名称”排序的类列表。

相关问题