我是C#的新手,所以请保持温柔。我在转换脚本中使用c#,我需要在列表中找到第6个最高值,例如
57
50
90
60
57
93
100
53
73
87
77
我可以使用
将其更改为字符串数组string [] arr = args.Content.Split("\r\n".ToCharArray());
但我从那里迷路了
由于 保罗·法恩
答案 0 :(得分:3)
如果您想以数字方式对其进行排序,则必须先将字符串转换为int
,然后才能使用Enumerable.OrderByDescending
和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));
(忽略无效格式的异常处理或项目太少)
答案 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];