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

时间:2016-03-04 15:00:32

标签: c# .net

如何在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

5 个答案:

答案 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] });

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