我有一个包含双精度数的数组。现在我想从数组中获取 3 个最高值,并且我想知道它们的索引是什么。
这是我的代码:
var threeHighest = wineOfferCounter.OrderByDescending(x => x).Take(3).ToArray();
var firstIndex = wineOfferCounter.ToList().IndexOf(threeHighest[0]);
var secondIndex = wineOfferCounter.ToList().IndexOf(threeHighest[1]);
var thirdIndex = wineOfferCounter.ToList().IndexOf(threeHighest[2]);
Console.WriteLine("Offer " + firstIndex + " bought " + threeHighest[0] + " times");
Console.WriteLine("Offer " + secondIndex + " bought " + threeHighest[1] + " times");
Console.WriteLine("Offer " + thirdIndex + " bought " + threeHighest[2] + " times");
Run Code Online (Sandbox Code Playgroud)
但是当wineOfferCounter包含两个或多个相同的值时,我会得到第一个索引两次。相反,我想获得唯一的索引。因此,如果在位置处的wineOfferCounter[3]值是 25,并且在wineOfferCounter[6]处的值也是 25。结果是:
"Offer 3 bought 25 times"
"Offer 3 bought 25 times"
Run Code Online (Sandbox Code Playgroud)
但我想要:
"Offer 3 bought 25 times"
"Offer 6 bought 25 times"
Run Code Online (Sandbox Code Playgroud)
您可以创建一个带有索引和值的临时类,然后按此类成员进行排序。像这样的代码:
var result = wineOfferCounter
.Select((v, i) => new { v, i })
.OrderByDescending(x => x.v)
.ThenByDescending(x => x.i)
.Take(3)
.ToArray();
Run Code Online (Sandbox Code Playgroud)
然后迭代这个集合:
foreach (var entry in result)
{
Console.WriteLine("Offer " + entry.i + " bought " + entry.v + " times");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1572 次 |
| 最近记录: |