字典使所有键的值等于最近的键/值添加

Posted

技术标签:

【中文标题】字典使所有键的值等于最近的键/值添加【英文标题】:Dictionary makes value for all keys equal to most recent key/value addition 【发布时间】:2012-07-10 17:43:38 【问题描述】:

我正在尝试将一些项目添加到字典对象(数据库 ID 和值对),以让用户在提交之前确认他们的选择。我有以下代码部分,它将一个项目添加到字典中。添加后,我循环遍历 Dictionary.Keys 并将每个键/值打印到列表框供用户查看。我的字典对象是表单上的公共变量,并在 Form_Load 事件中设置。

Dim PickListID As Integer
If txtPercentOfStream <> "" Then
    PickListID = cboCoalTypes
    If Not CoalsInStreamDic.Exists(PickListID) Then
        CoalsInStreamDic.Add PickListID, txtPercentOfStream
    End If
Else
    Exit Sub
End If

奇怪的是,每当我添加一个新的键/值对时,新键的值就会成为除新键之外所有现有键的值。

我在与字典交互之前和之后运行这个小块

Dim key As Variant
For Each key In CoalsInStreamDic.Keys
    Debug.Print key & "::" & CoalsInStreamDic.item(key)
Next key
Debug.Print

即用户单击按钮,first 认为发生的情况是上面的块,以确认旧键具有其原始值,但它们没有。它们已经被“新值”所取代。之后运行该块可以确认这一点。

为什么会这样?

【问题讨论】:

【参考方案1】:

问题是您没有添加 TextBox 的文本,而是添加了 TextBox

如果您将代码更改为以下内容,它应该可以工作

If txtPercentOfStream <> "" Then
    Dim PickListID As Integer, PercentOfStream As Integer
    PercentOfStream = txtPercentOfStream
    PickListID = cboCoalTypes
    If Not CoalsInStreamDic.Exists(PickListID) Then
        CoalsInStreamDic.Add PickListID, PercentOfStream
    End If
Else
    Exit Sub
End If

【讨论】:

啊,这很有道理!唯一的问题是使用txtPercentOfStream.Text 会出现此错误“除非控件具有焦点,否则您无法引用控件的属性或方法。”所以我做了一个Dim PercentOfStream As Integer 然后PercentOfStream = txtPercentOfStream 并将PercentOfStream 添加到我的字典中。 另一种方法是调用txtPercentOfStream.Value.Text 属性使用起来令人沮丧,调用它几乎是不可能的。 抱歉现在才看到这些cmets,很高兴你解决了你的问题,我会用你的cmets更新我的答案 谢谢,看起来不错。我又做了一个更正:最初的 if 将整数与字符串进行比较,我将条件更改为查看文本框,然后将文本框分配给整数 PercentOfStream

以上是关于字典使所有键的值等于最近的键/值添加的主要内容,如果未能解决你的问题,请参考以下文章

给定一个字符串列表,如果任何值等于列表中的值,我想将字典的值添加到新字典中[重复]

在列表中查找小于或等于键的值

kafka主题分区的数量和数据中不同键的数量

添加键的值并按在 Python 中的字典列表中出现的键对其进行排序

如何打印除dict中的键之外的所有键的值[重复]

Python_dict部分功能介绍