-5

我是 C# 新手,所以请温柔一点。我在转换脚本中使用 c#,我需要在这样的列表中找到第 6 个最高值

57
50
90
60
57
93
100
53
73
87
77

我可以通过使用将其更改为字符串数组

string [] arr = args.Content.Split("\r\n".ToCharArray());

但我从那里迷路了

谢谢保罗·冯

4

3 回答 3

3

如果要按数字对其进行排序,则必须int先将字符串转换为,然后可以使用Enumerable.OrderByDescendingand Enumerable.Skip(5).Take(1)

IEnumerable<int> ints = arr.Select(int.Parse)
                           .OrderByDescending(i => i)
                           .Skip(5).Take(1);
Console.Write("Sixth element is: " + ints.First());

或从有序序列创建一个新列表,然后使用Enumerable.ElementAt

List<int> ints = arr.Select(int.Parse).OrderByDescending(i => i).ToList();
Console.Write("Sixth element is: " + ints.ElementAt(5));

(省略了无效格式或项目太少的异常处理)

于 2013-07-03T21:56:12.117 回答
1

您可以使用 LINQ,如下所示:

var res = args.Content.Split("\r\n".ToCharArray())
     .Select(int.Parse)
     .OrderBy(x=>x)
     .Skip(5)
     .FirstOrDefault();
于 2013-07-03T21:56:48.347 回答
0

首先,您需要先将数字转换为int[]. 你可以这样做:

string[] strs = args.Content.Split("\r\n".ToCharArray());
int[] ints = new int[strs.Length];
for (int i = 0; i < strs.Length; i++)
    ints[i] = int.Parse(strs[i]);

然后,您可以使用Array.Sort(ints);对它们进行实际排序。然后,您用于int result = ints[ints.Length - 6 - 1];获取排序数组中倒数第六个元素:即第 6 个最高元素。

完成的代码如下所示:

string[] strs = args.Content.Split("\r\n".ToCharArray());
int[] ints = new int[strs.Length];
for (int i = 0; i < strs.Length; i++)
    ints[i] = int.Parse(strs[i]);

Array.Sort(ints);

int result = ints[ints.Length - 6 - 1];
于 2013-07-03T21:53:28.063 回答