如何在列表中找到第6个最高值

时间:2013-07-03 21:49:13

标签: c# sorting

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

57
50
90
60
57
93
100
53
73
87
77

我可以使用

将其更改为字符串数组
string [] arr = args.Content.Split("\r\n".ToCharArray());

但我从那里迷路了

由于 保罗·法恩

3 个答案:

答案 0 :(得分:3)

如果您想以数字方式对其进行排序,则必须先将字符串转换为int,然后才能使用Enumerable.OrderByDescendingEnumerable.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));

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

答案 1 :(得分:1)

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

var res = args.Content.Split("\r\n".ToCharArray())
     .Select(int.Parse)
     .OrderBy(x=>x)
     .Skip(5)
     .FirstOrDefault();

答案 2 :(得分: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];