排序数组包含使用c#数组的数字字符串

时间:2018-04-10 07:17:50

标签: c# arrays sorting

请参阅以下数组

string[] numArray = {"two","three","one", "seven","nine", "two", "one"};

我们需要按数字对此数组进行排序,并返回已排序的数组,如

string[] output = {"one","one","two","two","three","seven","nine"};

请仅使用字符串数组或任何方法建议c#代码中的最佳逻辑。

2 个答案:

答案 0 :(得分:0)

您可以将数字存储在字典中,其中键是字符串(例如"two"),值可以是整数(例如2)。通过使用LINQ,您可以先用数字替换输入数组中的字符串,然后使用OrderBy对它们进行排序。数字排序后,您可以将数字转换回字符串:

Dictionary<string, int> numbers = new Dictionary<string, int>() {
    { "one", 1 },
    { "two", 2 },
    { "three", 3 },
    { "four", 4 },
    { "five", 5 },
    { "six", 6 },
    { "seven", 7 },
    { "eight", 8 },
    { "nine", 9 },
};

string[] wordArray = { "two", "three", "one", "seven", "nine", "two", "one" };

var numberArray = Enumerable.Range(0, wordArray.Length)
                            .Select(i => numbers[wordArray[i]])
                            .OrderBy(x => x).ToArray();

var output = Enumerable.Range(0, numberArray.Length)
                       .Select(i => numbers.FirstOrDefault(x => x.Value == numberArray[i]).Key)
                       .ToArray();

Output = {"one","one","two","two","three","seven","nine"}

答案 1 :(得分:0)

您需要提供一个订单(实际上是equivalence relation)才能进行排序。字符的顺序通常是a,b,c,......而通常在诸如“one”之类的单词上给出的顺序称为lexicographic order。但是你想按照背后的含义排序,它的语义:整数。

你的电脑不知道你想要这个,所以你需要提供意思。这是通过一个功能(技术上是字典)。

计算机对内置的整数有顺序(它也是用标准整数构建的,通常是数学)。因此,您需要提供一对一的功能(例如,使用字典或uples列表,例如,List&lt;(string,int)&gt;),因此您可以从整数对等体中对单词进行排序。你也可以用字母映射单词:one-a,two-b,......当你到达z时,你继续aa(它是27的基数)。您也可以使用位(base 2),base64等执行此操作。但总是有一个带整数的映射。

恕我直言,理解比认识更重要。现在您可以编写许多解决方案。