【问题标题】:Group dictionary by values and return list of keys按值分组字典并返回键列表
【发布时间】:2015-06-12 11:34:01
【问题描述】:

以下代码旨在检查 Excel 单元格的值并返回一个 List(Of Excel.Range),其中仅包含值唯一的单元格。带问号的线是引起疼痛的线。

  Private Function UniqueValues(ws As Excel.Worksheet) As List(Of Excel.Range)
    Dim listRanges As New List(Of Excel.Range)
    Dim dicValues As New Dictionary(Of Excel.Range, Object)

    For Each rng As Excel.Range In ws.UsedRange
      dicValues.Add(rng, rng.Value2)
    Next

    'Get list of cells with unique values
    listRanges = dicValues.Keys.GroupBy(Function(x) x.Value2).ToList '????

    dicValues = Nothing
    Return listRanges
  End Function

带问号的行的正确代码是什么?请在 VB.NET 中回复,因为 Internet 上缺乏 VB.NET LINQ 示例,我很难将 LINQ 从 C# 转换为 VB.NET。

【问题讨论】:

  • 我删除了 C# 标签,因为它与这个问题无关。

标签: vb.net excel linq dictionary


【解决方案1】:

这应该可以解决问题:

listRanges = dicValues.Values.Distinct().ToList()

【讨论】:

  • 谢谢,但 Visual Studio 不喜欢这样,并说“'DistinctBy' 不是...的成员”
  • Imports System.Linq 添加到类中
  • 什么是DistinctBy() - 这是来自导入的库吗?
  • 添加导入 System.Linq 没有帮助,并且建议的解决方案都不起作用。我使用 .NET 4.0 客户端配置文件是否重要?
  • @MacG 哎呀,2 太多了:Values2 -> Values。现在尝试一下:Dim list As New List(Of String) Dim dicValues As New Dictionary(Of String, String) dicValues.Add("test", "test2") dicValues.Add("test2", "test2") dicValues.Add("test3", "test4") list = dicValues.Values.Distinct().ToList 对我来说,它现在只显示 test2 和 test4。而不是 test2,2 次。
【解决方案2】:

这是我最终完成的工作,它奏效了。我相信可能有一种更快的方法使用不需要第二个循环的 LINQ,所以如果有人有更优雅的解决方案,请发布。

  Private Function UniqueValues(ws As Excel.Worksheet) As List(Of Excel.Range)
    Dim listRanges As New List(Of Excel.Range)
    Dim dicValues As New Dictionary(Of Excel.Range, Object)

    For Each rng As Excel.Range In ws.UsedRange
      dicValues.Add(rng, rng.Value2)
    Next

    'Get list of cells with unique values
    Dim uniqueVals = dicValues.Where(Function(x)
                                       Return dicValues.Where(Function(y) y.Value = x.Value).Count = 1
                                     End Function)
    For Each itm In uniqueVals
      listRanges.Add(itm.Key)
    Next

    uniqueVals = Nothing
    dicValues = Nothing
    Return listRanges
  End Function

【讨论】:

    猜你喜欢
    • 2021-05-09
    • 2022-12-07
    • 1970-01-01
    • 2017-11-11
    • 2020-02-09
    • 2016-01-23
    • 2014-03-07
    • 1970-01-01
    • 2019-06-29
    相关资源
    最近更新 更多