Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中按升序对字符串数组排序_C#_.net_Visual Studio - Fatal编程技术网

C# 在C中按升序对字符串数组排序

C# 在C中按升序对字符串数组排序,c#,.net,visual-studio,C#,.net,Visual Studio,我有一个字符串数组 string[] my_array = {"5:five", "8:eight","4:four", "7:seven","1:one", "6:six"}; 我希望有一个如下所示的输出字符串,以便以升序连接这些值 output_string = "onefourfivesixseveneight"; 这是我的密码 string [] args = {"5:five", "8:eight","4:four", "7:seven","1:one",

我有一个字符串数组

string[] my_array = {"5:five", "8:eight","4:four", "7:seven","1:one", "6:six"};
我希望有一个如下所示的输出字符串,以便以升序连接这些值

output_string = "onefourfivesixseveneight";
这是我的密码

string [] args = {"5:five", "8:eight","4:four", "7:seven","1:one", 
                              "6:six" ,"840"};
            string outputString = "";
           int lowest_divisor = 1;
           int dividend = Convert.ToInt32(args[args.Length - 1]);
           for(int i = 0; i<args.Length - 1; i++)
               {

               string[] pairs = args[i].Split(":");

               int divisor = Convert.ToInt32(pairs[0]);

               string pairString = pairs[1];

               if(i == 0)
               {

                   lowest_divisor = divisor;
                   outputString = pairString;
               }
               else if(divisor <= lowest_divisor)
               {
                   outputString = pairString + outputString;
                   lowest_divisor = divisor;
               }
               else if(divisor > lowest_divisor)
               {
                  outputString = outputString + pairString;


               }
    }

首先,我们可以限制为int:value格式的字符串

IEnumerable<string> validStrings = my_array.Where(x => x.Contains(':') && int.TryParse(x.Split(':')[0], out int test));

我认为最简单的方法是使用linq。 像这样:

string outputString = string.Join("", args.OrderBy(x => int.Parse(x.Split(':')[0])).Select(x => x.Split(':').Length > 1 ? x.Split(':')[1] : ""));

如果您不控制内容,可以添加检查以确保它不会引发异常

,这比提供的linq解决方案要详细一点

      SortedDictionary<int, string> dict = new SortedDictionary<int, string>();
      foreach (string s in my_array)
       {
            string[] splitArr=s.Split(':');
            dict.Add(Convert.ToInt32(splitArr[0]), splitArr[1]);
        }            

        StringBuilder sb = new StringBuilder();
        foreach (KeyValuePair<int, string> kvp in dict)
        {
            sb.Append(kvp.Value);
        }
        string final=sb.ToString();

所有除数的东西都在做什么?你现在得到的结果是什么?这与你的预期有什么不同。对字符串数组进行排序就像对args.Takeargs.Length-1.OrderBya=>a一样简单,但是不清楚还需要做什么……假设我有一个字符串数组:my_array={5:5,8:8,4:4,7:7,1:1,6:6};我想要一个如下格式的输出:output_string=onefourfivesixeveneight。注意字符串的顺序
string outputString = string.Join("", args.OrderBy(x => int.Parse(x.Split(':')[0])).Select(x => x.Split(':').Length > 1 ? x.Split(':')[1] : ""));
      SortedDictionary<int, string> dict = new SortedDictionary<int, string>();
      foreach (string s in my_array)
       {
            string[] splitArr=s.Split(':');
            dict.Add(Convert.ToInt32(splitArr[0]), splitArr[1]);
        }            

        StringBuilder sb = new StringBuilder();
        foreach (KeyValuePair<int, string> kvp in dict)
        {
            sb.Append(kvp.Value);
        }
        string final=sb.ToString();