【问题标题】: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..
}

【问题讨论】:

    标签: c# arrays linq


    【解决方案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])
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多