首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不尊重某些字符的情况下排序列表?

如何在不尊重某些字符的情况下排序列表?
EN

Stack Overflow用户
提问于 2019-08-06 14:10:27
回答 3查看 100关注 0票数 4

我目前有一个字符串列表,需要在不考虑以下字符的情况下排序('.', ',', '-', '\'')

示例

代码语言:javascript
复制
        var cities = new List<string>()
        {                
            "Aigle ",
            "Bulle",
            "La Chaux-de-Fonds",
            "L'Abbaye",
            "Malleray",            
            "Sierre",
            "S. City",
            "St-Aubin",
            "St-Cergue",
            "St-Gingolph",
            "St-Légier-La Chiesaz",
            "St-Maurice",
            "St-Sulpice",
            "St-Sulpice",
            "Staad"
        };

默认下订单

代码语言:javascript
复制
var ordered = cities
  .OrderBy(x => x)
  .ToList();

输出

代码语言:javascript
复制
"Aigle"
"Bulle"
"La Chaux-de-Fonds"
"L'Abbaye"
"Malleray"
"S. City"
"Sierre"
"Staad"
"St-Aubin"
"St-Cergue"
"St-Gingolph"
"St-Légier-La Chiesaz"
"St-Maurice"
"St-Sulpice"
"St-Sulpice"

我想要的输出必须是这样。

代码语言:javascript
复制
"Aigle "
"Bulle"
"L'Abbaye"
"La Chaux-de-Fonds"
"Malleray"
"S. City"
"Sierre"
"St-Aubin"
"St-Cergue"
"St-Gingolph"
"St-Légier-La Chiesaz"
"St-Maurice"
"St-Sulpice"
"St-Sulpice"
"Staad"

我通过这样做得到了我想要的输出。

代码语言:javascript
复制
var ordered = cities
  .OrderBy(x => x.Replace(".", " ").Replace("-", " ").Replace("'", " "))
  .ToList();

我真的不知道我在做什么是否可以。

还有其他方法可以得到预期的结果吗?

EN

回答 3

Stack Overflow用户

发布于 2019-08-06 14:15:12

也许一个转变可以帮助你

代码语言:javascript
复制
var ordered = cities
                .Select(city => new { Name = city, NameForOrdering = string.Join(string.Empty, city.Where(c => Char.IsLetterOrDigit(c)).ToArray()) })

                .OrderBy(city => city.NameForOrdering)
                .Select(city => city.Name)
                .ToList();

这可以作为一种快速而肮脏的方法来帮助您通过一个障碍或测试一些东西,但是真正的解决方案是使用OrderBy的第二个重载,它需要您的自定义相等性比较-r。

票数 2
EN

Stack Overflow用户

发布于 2019-08-06 14:35:30

好的,我们只能通过字母订购(我们忽略,即删除所有非字母字符):

代码语言:javascript
复制
  var ordered = cities
    .OrderBy(city => string.Concat(city.Where(c => char.IsLetter(c))), 
             StringComparer.CurrentCultureIgnoreCase)
    .ToList();

  // Let's have a look
  Console.Write(string.Join(Environment.NewLine, ordered));

我们会收到以下订单

代码语言:javascript
复制
Aigle 
Bulle
L'Abbaye
La Chaux-de-Fonds
Malleray
S. City
Sierre
Staad
St-Aubin
St-Cergue
St-Gingolph
St-Légier-La Chiesaz
St-Maurice
St-Sulpice
St-Sulpice

如果要将所有非字母视为空格' ' (当前代码):

代码语言:javascript
复制
 var ordered = cities
    .OrderBy(city => string.Concat(city.Select(c => char.IsLetter(c) ? c : ' ')), 
             StringComparer.CurrentCultureIgnoreCase)
    .ToList();

命令将是

代码语言:javascript
复制
Aigle 
Bulle
L'Abbaye
La Chaux-de-Fonds
Malleray
S. City
Sierre
St-Aubin
St-Cergue
St-Gingolph
St-Légier-La Chiesaz
St-Maurice
St-Sulpice
St-Sulpice
Staad

Staad定位中订单的差异

票数 1
EN

Stack Overflow用户

发布于 2019-08-06 15:40:11

一种在忽略指定字符的同时对列表进行排序的方法,方法是替换需要忽略的字符。

例如,对于字符串cities的列表

代码语言:javascript
复制
var cities = new List<string>()
        {                
            "Aigle ",
            "Bulle",
            "La Chaux-de-Fonds",
            "L'Abbaye",
            "Malleray",            
            "Sierre",
            "S. City",
            "St-Aubin",
            "St-Cergue",
            "St-Gingolph",
            "St-Légier-La Chiesaz",
            "St-Maurice",
            "St-Sulpice",
            "St-Sulpice",
            "Staad"
        };

选项1:不使用Regex

代码语言:javascript
复制
var charList = new List<char>{'.', ',', '-', '\''};
var result = cities.OrderBy(x => charList.Aggregate(x, (c1, c2) => c1.Replace(c2, ' '))).ToArray();

选项2:使用Regex.

代码语言:javascript
复制
var charList = new List<char>{'.', ',', '-', '\''};
var regex = new Regex($"[{string.Join("",charList.OrderBy(x=>x))}]*");
var result = cities.OrderBy(x=> regex.Replace(x," "));

输出

代码语言:javascript
复制
Aigle  
Bulle 
L'Abbaye 
La Chaux-de-Fonds 
Malleray 
S. City 
Sierre 
St-Aubin 
St-Cergue 
St-Gingolph 
St-Légier-La Chiesaz 
St-Maurice 
St-Sulpice 
St-Sulpice 
Staad 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57378024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档