如何根据数字对字符串数组进行排序?

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])
);

【讨论】:

以上是关于如何根据数字对字符串数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS中对包含数字和名称的字符串数组进行排序

如何对表示数字(正数和负数以及小数部分)的字符串数组进行排序?

按字符串内的数字对数组进行排序[重复]

除数字外,如何按字母顺序对对象数组进行排序?

对包含数字和字符串的数组进行排序

Java:以数字方式对字符串数组进行排序