- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题是关于基于属性字段过滤vba集合或词典。我正在使用VBA处理大量数据提取,并为此目的使用了一系列自定义定义的类对象。一旦定义好它们并将它们填充到集合或字典中,就需要根据各种属性选择这些对象的子集。我的问题是,是否有比简单地遍历和测试条件更有效的方法?
下面是一些基本代码来说明此问题。由于我的工作场所政策,我什至无法上传示例Excel文件,但是数据并没有真正的意义。我的测试文件只是一堆randbetween函数,例如'= choose(randbetween(1,3),“ red”,“ green”,“ blue”)
'Simple Class definition
Option Explicit
'very simple test class
'One field is unique, the other three are simple strings that
'fall into groups (I don't always know what the groups will bee)
Private m_uniqueID As String
Private m_strTest1 As String
Private m_strTest2 As String
Private m_strTest3 As String
Public Property Get uniqueID() As String: uniqueID = m_uniqueID: End Property
Public Property Let uniqueID(ByVal NewValue As String): m_uniqueID = NewValue: End Property
Public Property Get strTest1() As String: strTest1 = m_strTest1: End Property
Public Property Let strTest1(ByVal NewValue As String): m_strTest1 = NewValue: End Property
Public Property Get strTest2() As String: strTest2 = m_strTest2: End Property
Public Property Let strTest2(ByVal NewValue As String): m_strTest2 = NewValue: End Property
Public Property Get strTest3() As String: strTest3 = m_strTest3: End Property
Public Property Let strTest3(ByVal NewValue As String): m_strTest3 = NewValue: End Property
Public Sub inefficientFilter()
Dim oTest As cl_Test
Dim colTest As Collection
'assume it's populated
Dim colMatches As Collection
Set colMatches = New Collection
For Each oTest In colTest
If oTest.strTest1 = "Green" Then
colMatches.Add Item:=oTest, Key:=oTest.uniqueID
End If
Next oTest
End Sub
最佳答案
使用示例类对30万个对象进行了测试。
编辑:更新了一点过滤的灵活性。
Dim data As Object
Sub Tester()
Dim colF As Collection
Dim arr, o As Class1, n As Long, t, k, o2 As Variant
arr = Array("Red", "Green", "Blue")
Set data = CreateObject("scripting.dictionary")
'load up some test data
t = Timer
For n = 1 To 300000#
Set o = New Class1
o.uniqueID = "ID" & Format(n, "000000000")
o.strTest1 = arr(Int((2 - 0 + 1) * Rnd + 0))
o.strTest2 = arr(Int((2 - 0 + 1) * Rnd + 0))
o.strTest3 = arr(Int((2 - 0 + 1) * Rnd + 0))
data.Add o.uniqueID, o
Next n
Debug.Print "Loaded", Timer - t
'do some filtering
t = Timer
Debug.Print "filtered", Filtered("strTest1", "Red").Count, Timer - t
t = Timer
Debug.Print "filtered", Filtered("strTest2", "Green").Count, Timer - t
t = Timer
Debug.Print "filtered", Filtered("strTest3", "Blue").Count, Timer - t
End Sub
'generic filtering on named property+value
Function Filtered(propName As String, propValue As String) As Collection
Dim rv As New Collection, o As Variant
For Each o In data.items
If CallByName(o, propName, VbGet) = propValue Then rv.Add o.uniqueID
Next o
Set Filtered = rv
End Function
Loaded 6.601563
filtered 100006 0.7109375
filtered 99936 0.828125
filtered 100144 0.9609375
关于excel - VBA-按属性筛选用户定义类的集合/词典的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47761763/
我正在尝试这样做: var myBeacons: [NSUUID: [Int]] = [NSUUID(UUIDString:"74278BDA-B644-4520-8F0C-720EAF059935"
我的字典有问题。如果我将一个对象添加到字典中,它会用添加的项目覆盖整个包含项目。 添加所有元素后,Dictionary 包含正确数量的项目,但项目都是最后添加的项目。 For Each shp In
我使用字典,我将有大约一百万个条目,我将定期添加、删除、编辑和轮询..我想知道所有条目的上/下边是什么,如果有一种更高效的方式。 最佳答案 这取决于你想做什么。如果您想要一个具有快速插入、查找和删除功
我在 Swift 类中的字典数组方面遇到问题。我的代码无法在类或结构中运行,但可以在外部运行。 var data = [Dictionary]() data.append([123: "test"])
有没有一种方法可以添加注释来记录 Dictionary 或 ConcurrentDictionary 以了解键/值的含义? 例如: Dictionary _users; 这个例子有一个用户字典。 gu
我正在基于 Android AOSP LatinIME 项目创建自己的输入法应用。我设法找到了一些用于自动更正和预测的字典文件(main_en.dict、main_fr.dict 等)。 但对于许多其
我已经通过 Locale::Maketext 使我的网站支持多种语言(或更具体地说是 CatalystX::I18N::Model::Maketext )。 我的 maketext 类在编译时通过从数
我不会说英语,而且我的英语也不是很好。我自以为是。我没有和其他人一起在一个共同的代码库上工作过。我没有任何编程的 friend 。我不与其他程序员一起工作(至少没有人关心这些事情)。 我想这可能解释了
我需要做 currentKey+1。所以我想找到键值的索引并获取下一个键(如果在末尾则为第一个)。我如何找到 key 的当前索引? 我正在使用 Dictionary我用 Linq 查找 .Find 或
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我使用 python 2.7 中的 shelve 模块保存了一个数据文件,该文件不知何故已损坏。我可以用 db = shelve.open('file.db') 加载它,但是当我调用 len(db)
我想试试这个抽认卡的想法,为即将到来的测试尝试学习关键字及其含义。我想在 python 上创建一个字典,我可以用它来帮助解决这个问题。这个想法是向我显示定义,然后我必须猜测已定义的词。我在下面展示了如
当尝试 .format() 一次列表中的多个词典时,控制台会给我一个 AttributeError:'list' object has no attribute 'items'。 我尝试滚动浏览提示的
我在公共(public)类(class)中有一个公共(public)词典如下: namespace ApiAssembly { public static class TypeStore
我需要做 currentKey+1。所以我想找到键值的索引并获取下一个键(如果在末尾则为第一个)。我如何找到 key 的当前索引? 我正在使用 Dictionary我用 Linq 查找 .Find 或
我的字典总是零,想了解为什么会这样。我的代码: var dic = [NSDate : MCACalendar]?() dic?[currentDate!] = calendar 最佳答案 @Kirs
给定(简化描述) 我们的一项服务在内存中有很多实例。大约 85% 是独一无二的。我们需要对这些项目进行非常快速的基于键的访问,因为它们在单个堆栈/调用中被非常频繁查询。这个单一上下文的性能得到了极大的
我想为“Sinhala Language speech recognition”僧伽罗语建立新的声学模型、新词典、新语言模型字符是基于 Unicode 的。例如 A=අ,I=ඉ,U=උ,KA=ක,BA
我需要一个带有 的正面和负面词的列表重量 根据单词的强度和周数分配单词。我有 : 1.) WordNet - 它为每个单词提供 + 或 - 分数。 2.) SentiWordNet - 在 [0,1]
我有一个 Jinja2 字典,我想要一个可以修改它的表达式 - 通过更改其内容或与另一个字典合并。 >>> import jinja2 >>> e = jinja2.Environment() 修改字
我是一名优秀的程序员,十分优秀!