c# - C# 按字母顺序排序字符串数组,注意首先放置以大写字母开头的字符串。第一的
问题描述
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
我也读过:
解决方案
您应该指定比较器,例如(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);
推荐阅读
- mysql - 锁定共享模式和更新,而不是 MariaDB 中的任何内容
- c# - 将一个模型从 ViewModel 发送回控制器
- reactjs - 为什么 useState 钩子会导致 React 中不必要的重新渲染循环?
- java - 找到成对产品的最大和
- angular - 如何在Angular的ngFor中首先显示最后一项?
- java - 在 Android 或 Java 中,有没有办法调整二维矩阵的大小
- sql - Google Cloud + SQL 上的 Spring Cloud 函数
- java - 在显示时修改 javafx 标签属性
- excel - 仅将非空单元格复制并粘贴到同一范围
- kubernetes - Kubernetes 集群行为