C#多个字符串按首字母排序

bill800208 2015-09-10 04:46:32
例如:
Li, si;Zhang, san;Wang, wu;Zhao, liu;An, jing

最后的效果是:
按照L Z W Z A字母排序成 An, jing;Li, si;Wang, wu;Zhao, liu;Zhang, san
只按首字母排序就行,后面的字母不管,相同的首字母自然排序就行或者有方法能按第二,第三,第四个字母排序

谢谢
...全文
1698 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajianchina 2015-09-14
  • 打赏
  • 举报
回复
string str = "Feng, Gui Jun - Ermaf;Gu, Jia Xi;Jin, Tian;Li, Tao;An, jing;Wang, Tao"; str = string.Join(";", str.Split(';').OrderBy(p => p).ToArray());
bill800208 2015-09-14
  • 打赏
  • 举报
回复
14楼的描述有误,不是最大的在最后面,而是mail.To中第一个联系人总是出现在最后边不按顺序排
bill800208 2015-09-14
  • 打赏
  • 举报
回复
如下代码 var result = ("Feng, Gui Jun - Ermaf;Gu, Jia Xi;Jin, Tian;Li, Tao;An, jing;Wang, Tao").Split(';').ToList(); string[] s = result.ToArray(); Array.Sort(s); foreach (string t in s) { mail.Body += t+";"; } 是按正常顺序输出的,但是字符串换成mail.To之后,还是这几个人就变成了 An, jing;Gu, Jia Xi;Jin, Tian;Li, Tao;Wang, Tao;Feng, Gui Jun - Ermaf;
bill800208 2015-09-14
  • 打赏
  • 举报
回复
谢谢各位大神 各位的方法都没有问题。其实我想做的是一个outlook 2007的VSTO,读取mail.To中的收件人并按首字母排序,但是在VSTO中应用各位的代码时总是最大的排在最后面,其他的是按字母顺序排序的,不明白为什么?哪位还能指导下,多谢啦 要求可以参考一下如下链接,我在组件论坛中发的,但是一直没有解决,谢谢 http://bbs.csdn.net/topics/391823487
长空X 2015-09-12
  • 打赏
  • 举报
回复
我的思路也是:按符号分割,比如空格 逗号。然后返回的数组加到集合中,集合中有排序的方法
橘子皮... 2015-09-12
  • 打赏
  • 举报
回复
OrderBy(name => name).ToList(); 这是什么版本的,net库才有的?我的4.0没这个功能
peekding 2015-09-11
  • 打赏
  • 举报
回复
string names = "Li, si;Zhang, san;Wang, wu;Zhao, liu;An, jing"; List<string> nameList = names.Split(';').OrderBy(name => name).ToList();
bill800208 2015-09-11
  • 打赏
  • 举报
回复
@duanzi_peng 谢谢,非常感谢
exception92 2015-09-11
  • 打赏
  • 举报
回复
引用 9 楼 bill800208 的回复:
@duanzi_peng 要原样输出名字并按首字母排序,包括分号,每个名字的长度不定,有长有短,这个方法能实现不?谢谢
再不懂的话 就 去网上搜 C# 如何 拼接字符串
bill800208 2015-09-11
  • 打赏
  • 举报
回复
@duanzi_peng 要原样输出名字并按首字母排序,包括分号,每个名字的长度不定,有长有短,这个方法能实现不?谢谢
crystal_lz 2015-09-11
  • 打赏
  • 举报
回复
Array.Sort()即可

foreach(var v in Array.Sort(str.Split(';')){
    Console.WriteLine(v);
}
exception92 2015-09-11
  • 打赏
  • 举报
回复
引用 6 楼 bill800208 的回复:
@duanzi_peng 如何输出?不太会,谢谢
想要怎样输出先?

 str.Split(';').OrderBy(p => p).ToList().ForEach(p => {
                Console.WriteLine(p);    
            });
bill800208 2015-09-11
  • 打赏
  • 举报
回复
@duanzi_peng 如何输出?不太会,谢谢
  • 打赏
  • 举报
回复
var result2 = str.Split(';').OrderBy(x => x, StringComparer.OrdinalIgnoreCase); 比较字符串尽量不要用ToUpper或ToLower,会生成副本
exception92 2015-09-10
  • 打赏
  • 举报
回复
通过 分号 分割成数组或者添加List中,使用linq 排序。
引用 1 楼 duanzi_peng 的回复:
通过 分号 分割成数组或者添加List中,使用linq 排序。


            var  result = ("Li, si;Zhang, san;Wang, wu;Zhao, liu;An, jing").Split(';').OrderBy(p=>p).ToList();
  • 打赏
  • 举报
回复
Console.WriteLine(string.Join(";", "Li, si;Zhang, san;Wang, wu;Zhao, liu;An, jing".Split(';').OrderBy(x => x.ToUpper())));
exception92 2015-09-10
  • 打赏
  • 举报
回复
通过 分号 分割成数组或者添加List中,使用linq 排序。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧