【问题标题】:How to add multiple values under a single key in dictionary如何在字典中的单个键下添加多个值
【发布时间】:2016-08-31 05:44:36
【问题描述】:

代码:VBA

如何借助字典进行以下操作?

项目“Facebook”应该有多个键,比如

.添加项目“Facebook”、“品牌”、2

.Add Item "Facebook", "post", 5

.Add Item "Facebook", "likes", 7

以及如何搜索整数值?

【问题讨论】:

  • 字典需要一个唯一的键。有几种方法可以将类似的数据存储在字典中,但您仅限于对唯一标识符进行键查找。如何构建容器主要取决于您打算如何使用它。剩下的代码是做什么的?
  • 基本上我想使用字典存储各种渠道(Facebook、Instagram、Twitter 等)的参数(喜欢、评论、分享等)的位置。我尝试过使用数组,但这是一项乏味的工作。

标签: vba


【解决方案1】:

我建议使用用户类型或类来存储您的数据。例如:

'Minimalistic ChannelInfo.cls
Option Explicit

Public Channel As String
Public Category As String
Public Count As Integer

对于容器,Dictionary 需要唯一的键,因此根据您从其中检索项目的方式,另一种类型的容器(数组、集合或自定义容器类)可能是更好的选择。如果您需要获取任意Type 的唯一密钥,您可以使用VarPtr。如果您需要一个唯一的对象键,您可以创建自己的哈希函数或使用其ObjPtr。请注意,这些对于检索您还没有引用的项目都不是特别有用。

Dim myFoos As New Scripting.Dictionary
Dim foo As ChannelInfo

Set foo = New ChannelInfo
With foo
    .Channel = "Facebook"
    .Category = "brand"
    .Count = 2
End With

myFoos.Add ObjPtr(foo), foo

如果您稍后使用 Channel 和 Category 的组合来聚合项目,则将其用作键可能更有用:

'Key is "Facebook|brand"
myFoos.Add foo.Channel & "|" & foo.Category, foo

【讨论】:

  • With foo 后面好像少了一些点
  • IMO (:-)) 对于这样一个简单的结构 UDT 会更可取
  • @user3598756 - 它可能在一个数组中,但它可能对集合和字典有问题,因为它可能会遇到this issue。我实际上也会稍微开发一下这个类(加载和保存方法、验证等)。
  • 该问题谈到了类中的 UDT:它是否也适用于集合中的 UDT?虽然如果有任何方法进来,那么毫无疑问,类就是那个
  • @user3598756 - 问题与跨类边界编组 UDT 有关。将 UDT 传递给 .Add 方法需要通过 Variant 进行强制转换,这需要类型库信息以允许编组器为其分配内存(通常作为 VT_USERDEFINED 传递)。编译器基本上是因为不知道如何转换而吓坏了。
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 2023-03-31
相关资源
最近更新 更多