按值键入字典并返回键的返回列表

下面的代码旨在检查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。

这应该够了吧:

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

这是我最终做了什么,哪些工作。 我相信使用LINQ可能会有一个更快的方法,不需要第二个循环,所以如果有人有一个更优雅的解决scheme,请张贴它。

  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