按值对字典进行分组并返回键列表



以下代码旨在检查 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 回复,因为鉴于互联网上缺乏 VB.NET LINQ 示例,我很难将 LINQ 从 C# 转换为 VB.NET。

这应该可以解决问题:

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

这是我最终做的事情,它奏效了。 我相信可能有一种更快的使用 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

相关内容

  • 没有找到相关文章

最新更新