我需要从字典中获取10个最大值。鉴于我有以下形式的一些数据:
ID Value
1 23
2 342
5 -23
...
最快的方法是什么?
为了使事情更清楚,以下是我将如何在C#中执行此操作的代码清单:
class Custom {
int ID {get; set;}
double Val {get; set;}
double Val2 {get; set;}
}
List<Custom> GetMaxValues(List<Custom> myList){
return myList.SortByDescending(c => c.Val).Take(10);
}
我在C#自定义类中包含了第二个值,因为我实际上需要在字典中使用多个值。多维数组是否是保存三元组数据的好方法。然后我可以简单地运行一些排序算法并从数组中选择最后10个项目。
编辑:我刚注意到我不能使用数组,因为数据有不同的类型。 ID实际上是字符串而不是整数。
答案 0 :(得分:2)
不要使用字典 - 请改用ArrayList:
Sub foo()
Dim myList As Object
Dim resultArray As Variant
'// create the arraylist and populate it
Set myList = CreateObject("System.Collections.ArrayList")
For i = 100 To 1 Step -1
myList.Add i
Next
'// sort the values numerically
myList.Sort
'// remove the last 90 elements (we're only interested in the first 10)
myList.RemoveRange 10, myList.Count - 10
'// pass the values to a single dimension array
resultArray = myList.ToArray()
'// print the results
Debug.Print Join$(resultArray, ",")
End Sub
答案 1 :(得分:1)
我已经生成了一些VBA,它应该将字典中的顶部 N 值返回到数组中。我已经尝试将其分解为辅助函数,以使其更易读,并划分可重用性的职责。当然,它可以进一步开发用于错误检查,但我相对较快地嘲笑它(例如,它忽略了重复)。
如果您需要执行此操作,请告诉我们,如果您需要任何帮助以采用自己的代码。
impressions