请参阅以下数组
string[] numArray = {"two","three","one", "seven","nine", "two", "one"};
我们需要按数字对此数组进行排序,并返回已排序的数组,如
string[] output = {"one","one","two","two","three","seven","nine"};
请仅使用字符串数组或任何方法建议c#代码中的最佳逻辑。
答案 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等执行此操作。但总是有一个带整数的映射。
恕我直言,理解比认识更重要。现在您可以编写许多解决方案。