在字符串数组中对数字和字母进行排序
本文关键字:排序 数字 字符串 数组 | 更新日期: 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 $"
部分,而5
和15
为整数,因此"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] });
(请注意,这假定两个列表的长度相同。 您可以添加一些条件检查来验证以防万一。