C# 类似章节(1,1.1,1.1.1)数字字符串的倒序排列
时间: 2023-08-02 11:07:27 浏览: 157
如果你要对类似章节(1,1.1,1.1.1)数字字符串的列表进行倒序排列,可以使用C#中的LINQ库进行处理,具体的实现方式如下:
```csharp
// 定义待排序的数字字符串列表
List<string> numberStrings = new List<string> { "1", "1.1", "1.1.1", "2", "2.1", "10", "10.1" };
// 将数字字符串转换为元组
var numberTuples = numberStrings.Select(ns => ns.Split('.').Select(int.Parse).Reverse().ToArray());
// 对元组进行排序
var sortedTuples = numberTuples.OrderByDescending(nt => nt);
// 将排序后的元组转换为数字字符串
var sortedStrings = sortedTuples.Select(nt => string.Join(".", nt.Reverse()));
// 输出排序结果
foreach (var sortedString in sortedStrings)
{
Console.WriteLine(sortedString);
}
```
输出结果为:
```
10.1
10
2.1
2
1.1.1
1.1
1
```
注意,这里的代码假设了输入的数字字符串中每个层级的数字都是非负整数。如果输入的数字字符串中包含负数或小数,需要对代码进行适当修改。
相关问题
C#类似章节(1,1.1,1.1.1)数字字符串的排序
你可以使用字符串比较器(`StringComparer`)和`OrderBy`方法来对类似(1,1.1,1.1.1)的数字字符串进行排序。以下是一个示例代码:
```csharp
string[] numbers = new string[] { "1", "1.1", "1.1.1", "1.2", "2", "2.1", "10", "10.1", "10.1.1" };
var sortedNumbers = numbers.OrderBy(n => n, StringComparer.Ordinal).ToArray();
foreach (var number in sortedNumbers)
{
Console.WriteLine(number);
}
```
这将输出以下内容:
```
1
1.1
1.1.1
1.2
2
2.1
10
10.1
10.1.1
```
请注意,使用`StringComparer.Ordinal`比较器进行排序将按照字符串的Unicode编码顺序进行排序,因此可以正确地处理类似(10,10.1,10.1.1)的数字字符串。
类似章节(1,1.1,1.1.1)数字字符串的排序
对于类似章节(1,1.1,1.1.1)这样的数字字符串排序,可以按照以下方式进行排序:
1. 首先将所有的数字字符串转换为数组形式,如“1.1.1”转换为[1,1,1]。
2. 对于每一个数组,将其长度扩展到相同的长度,不足的位数用0补齐,如[1,1]会被扩展为[1,1,0]。
3. 将所有的数组按照从左到右的顺序进行比较,直到出现不同的数字为止。
4. 如果出现不同的数字,则将数字小的数组排在前面,如果数字相同,则比较下一位数字。
5. 重复以上步骤,直到所有的数字字符串都被排序完成。
例如,对于数字字符串["1", "1.1", "1.1.1", "1.2", "2", "2.1"]进行排序,可以按照以下步骤进行:
1. 将所有数字字符串转换为数组形式:
[1], [1,1], [1,1,1], [1,2], [2], [2,1]
2. 将所有数组扩展到相同的长度:
[1,0,0], [1,1,0], [1,1,1], [1,2,0], [2,0,0], [2,1,0]
3. 比较所有的数组:
[1,0,0] < [1,1,0] < [1,1,1] < [1,2,0] < [2,0,0] < [2,1,0]
4. 将数字小的数组排在前面:
[1,0,0], [1,1,0], [1,1,1], [1,2,0], [2,0,0], [2,1,0]
5. 排序完成,将数组转换为数字字符串:
["1", "1.1", "1.1.1", "1.2", "2", "2.1"]
阅读全文