如何根据数字对字符串数组进行排序?
Posted
技术标签:
【中文标题】如何根据数字对字符串数组进行排序?【英文标题】:How to sort string Array based on Number? 【发布时间】:2021-08-17 21:33:47 【问题描述】:我有一个问题陈述如下;
inputArray = "rajesh|51|32|asd", "nitin|71|27|asd", "test|11|30|asd"
这是一个输入数组,我需要根据每个字符串中名称旁边的数字对这个Sting Array[]
进行升序排序,所以返回的输出数组应该是这样的;
output = "test|11|30|asd", "rajesh|51|32|asd" ,"nitin|71|27|asd"
我尝试了下面的代码,但我无法编写完整的代码,因为我卡在某个点上,我应该使用什么来获得所需的排序输出数组?
int sort = 0;
foreach(string s in inputArray)
string[] foo = s.split("|");
int orderNum = Convert.ToInt32(foo[1])
if(sort<orderNum)
sort = orderNum;
//stuck here..
【问题讨论】:
【参考方案1】:只需使用 Linq:
//input array
var input = new string[]
"test|11|30|asd",
"rajesh|51|32|asd",
"nitin|71|27|asd"
;
//sorter
var output = input.OrderBy(s => int.Parse(s.Split('|')[1]));
//dump the resulting list
foreach (string s in output)
Console.WriteLine(s);
【讨论】:
你说得对,我认为问题不仅仅是排序 :) 这是正确的解决方案,除非我们不知道什么 @Fabjan 没有问题,我重新阅读问题是为了误解一些东西! 如果我们不想使用 Linq 怎么办? 那我猜你必须实现IComparer 接口并使用Array.Sort
甚至编写自己的排序算法。
@RahulNagrale Fabjan 是对的,但为什么不使用它呢?我没有看到任何避免它的正当理由。【参考方案2】:
如果你想就地排序,你应该使用Array.Sort
函数
Array.Sort(inputArray, (s1, s2) =>
int.Parse(s1.split("|")[1].CompareTo(int.Parse(s2.split("|")[1])
);
【讨论】:
以上是关于如何根据数字对字符串数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章