【问题标题】:Grouping Values in a dictionary在字典中分组值
【发布时间】:2018-02-21 17:44:25
【问题描述】:

我有一本字典,其中包含以下格式的随机变量(取决于它正在扫描的文档)

  • ,A, 500
  • ,ORD, 50000
  • ,ORD, 200

我需要能够将属于同一类的所有值组合在一起(ORD 是一个,A 是另一个),然后将整数加在一起以便我可以输出

A - 500

ORD - 50200

所以我想我需要根据类的数量分配不同的整数变量,然后将它们加在一起,但我真的不知道该怎么做

编辑插入代码:

Dim sharenum As Int32 = 0
Dim tempshold As String = ""
  For Each sHolder In shareholders
        tempshold = Replace(sHolder.numberShares, ",", "")
        sharenum = Convert.ToInt32(tempshold)
        dicClassShares.Add("," & Trim(sHolder.shareClass) & ",", sharenum)

【问题讨论】:

  • 显示初始化字典的代码。 "ORD""A" 是字典的键吗?
  • 抱歉,添加为编辑
  • 我想知道为什么当您将 ,ORD 添加为字典的键时,您没有收到错误“键已存在”。
  • 如果dicClassSharesDictionary<string, int> 类型,您的代码将抛出重复的sHolder.shareClass 异常
  • 我只是好奇,如果dicClassShare 是字典,它就不能有重复的键。或者如果密钥已经存在,您想更新值?如果是,this question 确实回答了您的问题

标签: vb.net dictionary


【解决方案1】:

将您的字典结构更改为Dictionary(Of String, List(Of Int32))

然后检查键并根据键的存在添加或编辑字典条目:

Dim dicClassShares As Dictionary(Of String, List(Of Int32)) = New Dictionary(Of String, List(Of Int32))

If Not dicClassShares.ContainsKey Then
    dicClassShares.Add("," & Trim(sHolder.shareClass) & ",", New List(Of Int32))
End If
dicClassShares("," & Trim(sHolder.shareClass) & ",").Add(sharenum)

最后得到你想要的求和值……

Dim summedValues As Dictionary(Of String, Int32) = 
    dicClassShares.ToDictionary(Of String, Int32)(
        Function(k) k.Key,
        Function(v) v.Value.Sum
    )

最后一点在我脑海中。如果遇到错误,请尝试一下。

【讨论】:

  • 谢谢,正是我需要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 2013-08-13
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 2011-04-28
相关资源
最近更新 更多