在字符串数组中对数字和字母进行排序

本文关键字:排序 数字 字符串 数组 | 更新日期: 2023-09-27 18:37:19

如何在 c# 上对此进行排序。首先,我想按字母顺序对数字和字母进行排序。代码无处可去,忽略代码的另一部分。主要对排序感兴趣。

interface vehicle
{
    void Mon();
}
class order : vehicle
{
    public void Mon()
    {
        string[] arr = new string[]
        {
            "B $15",
            "A $251",
            "B $5",
            "B $25",
            "A $250",
            "A $45"
        };
    }
}
class ABC
{
    public static void Main(string[] args)
    {
    }
 }
 }

所以我的预期结果是:

   A $5
   A $15
   A $25
   B $45
   B $250
   B $251

在字符串数组中对数字和字母进行排序

var lettersAndNumbers = arr.Select(x => x.Split('$'));
var orderedLetters = lettersAndNumbers.Select(x => x[0]).OrderBy(x => x);
var orderedNumbers = lettersAndNumbers.Select(x => int.Parse(x[1])).OrderBy(x => x);
string[] result = orderedLetters
    .Zip(orderedNumbers, (letter, number) => letter + "$" + number).ToArray();

这将输出预期的结果:

        string[] arr = new string[]
    {
        "B $15",
        "A $251",
        "B $5",
        "B $25",
        "A $250",
        "A $45"
    };
        var arrSplited = arr.Select(i => i.Split(' '));
        var letters = arrSplited
            .Select(i => i[0])
            .OrderBy(i => i)
            .ToArray();
        var numbers = arrSplited
            .Select(i => i[1])
            .OrderBy(i => Convert.ToInt32(i.Replace("$", "").Trim()))
            .Select(i => i.ToString())
            .ToArray();
        var result = new List<string>();
        for (int i = 0; i < letters.Length; i++)
        {
            result.Add(letters[i]);
            result.Add(numbers[i]);
        }

好吧,自从您在问题中更改它以来,就不再了。祝你好运。

似乎您希望将字符串中的数字作为数字进行比较(例如,在比较"A $5""A $15"时,我们按字典比较"A $"部分,而515为整数,因此"A $5"

using System.Runtime.InteropServices;
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
private static extern int StrCmpLogicalW(string x, string y);
...
Array.Sort(arr, (left, right) => StrCmpLogicalW(
  Path.GetFileNameWithoutExtension(left),
  Path.GetFileNameWithoutExtension(right)));

它应该看起来像这样,这是在格式正确的假设下进行的。

var values = arr.Select(x => x.Split(' ')).ToList();
var strList = values.Select(x => x[0]).OrderBy(x => x).ToList();
var intList = values.Select(x => Int32.Parse(x[1].SubString(1)))
                                                          .OrderBy(x => x).ToList();

foreach (var pair in strList.Zip(intList))
{
    //Do work with pair.Key and pair.Value
}

有一个字符串数组。 你想要的是两个数组(一个是字符或字符串,一个是数字数据,以实现直观的排序)。 像这样:

var firstValues = new List<char> { 'B', 'A', 'B', 'B', 'A', 'A' };
var secondValues = new List<int> { 15, 251, 5, 25, 250, 45 };

对它们进行排序:

var sortedFirst = firstValues.OrderBy(v => v).ToList();
var sortedSecond = secondValues.OrderBy(v => v).ToList();

然后,您可以根据需要将它们合并到单个数据结构中:

var sortedList = sortedFirst.Select((element, index) =>
    new { First = element, Second = sortedSecond[index] });

(请注意,这假定两个列表的长度相同。 您可以添加一些条件检查来验证以防万一。