Excel VBA Max 10词典中的值

时间:2016-04-28 12:25:32

标签: excel excel-vba vba

我需要从字典中获取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实际上是字符串而不是整数。

2 个答案:

答案 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

MSDN ArrayList Class

答案 1 :(得分:1)

我已经生成了一些VBA,它应该将字典中的顶部 N 值返回到数组中。我已经尝试将其分解为辅助函数,以使其更易读,并划分可重用性的职责。当然,它可以进一步开发用于错误检查,但我相对较快地嘲笑它(例如,它忽略了重复)。

如果您需要执行此操作,请告诉我们,如果您需要任何帮助以采用自己的代码。

impressions