- 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/
我正在研究这个领域以获得实时对象检测。 视频示例: http://www.youtube.com/watch?v=Bm5qUG-06V8 http://www.youtube.com/watch?v=
问题 我正在为 C 语言的项目寻找一种数据结构来存储列表列表。我需要能够访问仅给定 n 的第 n 个列表(这些术语将被乱序访问)。各个列表将包含 1 到 M 之间的整数(为了具体起见,假设 M = 2
我有一个List (Maybe a),我想过滤出Nothing的实例。我大概已经做到了,但是对所需的代码量却不满意: removeNothingFromList : List (Maybe a) ->
我对 Blazor 有基本的输入 当我输入我认为无效的字符(例如“/”或“:/\\""|?* ]"; Search = Regex.Replace(args.Value.ToSt
我有一个主应用程序,允许用户编辑所有数据(大约 20 个字段)。更新后,我将其添加到服务总线主题中,系统的其他区域也订阅了该主题。 其中一个订阅仅关心单个字段(电话号码)是否更新。我想知道处理这个问题
我是ElasticSearch的新手,需要帮助解决以下问题: 我有一组包含多个产品的文档。我想通过“Apple”过滤产品属性product_brand并获取与过滤器匹配的产品数量。但是,结果应按文档I
我想过滤查询集中特定范围内的项目。这就是我的模型的样子 class modelEmployee(models.Model): user = models.ForeignKey(User, on
尽管数组 a 的大小不断增加,但我无法找到 8 位素数。它适用于较小的数字: #include #include int main() { int n,a[100000],i,m,k;
我不希望能够使用代码隐藏来搜索我的 gridview 结果。 我有一个按钮和一个 GridView :
我想使用 sift/surf 进行模板匹配。图像可以有 1...n 个目标。使用 surf/sift 只能提取一个目标。一种想法是将图像分割成多个片段,然后寻找筛选/冲浪匹配。它有效,但显然由于速度和
这是使用 Xodus API 限制实体查询的方法: final EntityIterable allUsers = txn.getAll(storeName).skip(skip).take(limi
我有 2 个 excel 文件:IDList.csv 和 Database.csv。 IDList 包含我要从数据库中过滤掉的 300 个 ID 号的列表,其中包含 2000 个条目(在数据库中留下
过滤 Treeview 节点的最佳/有效方法是什么? 例如:我输入“abc”,只有包含“abc”的节点可见。然后我输入 “abcd”,我应该会看到唯一包含 “abcd” 文本的节点。依此类推,所以每次
我有两个关于报告的 tablix,以及一个用于向 tablix 提供数据的数据集。我在报告中有一个多选参数,我需要根据该参数中的值过滤结果。 有什么区别,如果有,什么是更好的解决方案: 直接在数据集或
我对 flex 搜索/ NEST还是很陌生,需要一些帮助才能查询/过滤我的数据。 我有一个产品 list 。而且这些产品可以具有任意数量的选项,并具有与之相关的值。而且我需要能够按选项名称及其值来过滤
我正在使用过滤条件从原始表创建一个表,其中我的过滤值来自 SELECTEDVALUE 表格没有根据 SELECTEDVALUE 进行过滤,如果我用一个真实的值替换它就可以了。 代码(不起作用) Tra
我正在设置一个 MSBuild 项目来运行一些 NUnit 测试,使用 MSBuild Community Tasks Project 。 通过这些设置,我将能够运行 NUnit 测试:
我正在使用过滤条件从原始表创建一个表,其中我的过滤值来自 SELECTEDVALUE 表格没有根据 SELECTEDVALUE 进行过滤,如果我用一个真实的值替换它就可以了。 代码(不起作用) Tra
例如,我们有一个列表,我们想用特定的谓词将其分成两部分。 首先,我们可以使用filter和filterNot。 val trueList = list.filter(predicate) val fa
我尝试为 [Start] 使用某种范围: var calendar = outlookApplication.GetNamespace("MAPI").GetDefaultFolder(OlDefau
我是一名优秀的程序员,十分优秀!