如何在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
答案 0 :(得分:3)
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();
答案 1 :(得分:0)
看起来应该是这样的,这是假设格式正确的。
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
}
答案 2 :(得分:0)
似乎您希望将字符串中的数字作为数字进行比较(例如,在比较"A $5"
和"A $15"
时我们比较{{1部分词汇量,而"A $"
和5
为整数,因此15
< "A $5"
);在这种情况下试试这个:
"A $15"
答案 3 :(得分:0)
这会输出预期结果:
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]);
}
好吧,不再了,因为你在问题中改变了它。祝你好运。
答案 4 :(得分:0)
你拥有的是一个字符串数组。您想要的是两个数组(一个字符或字符串,以及一个数字数据,以实现直观的排序)。像这样:
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] });
(请注意,这假设两个列表的长度相同。您可以添加一些条件检查以验证以防万一。)