计数列表中对象属性的重复项

计数列表中对象属性的重复项

问题描述:

我花了整个下午都在寻找这个答案,但没有任何运气。计数列表中对象属性的重复项

我有一个对象声明,并且它有一些属性。例如

Public Class myObject 
    Private _prop1 As String 
    Private _prop2 As String 
    Private _prop3 As String 
    Private _prop4 As String 


    Public Sub New(ByVal val1 As String _ 
      , ByVal val2 As String _ 
      , ByVal val3 As String _ 
      , ByVal val4 As String) 
    _prop1 = val1 
    _prop2 = val2 
    _prop3 = val3 
    _prop4 = val4 
    End Sub 

    Public Property Prop1() As String 
    Get 
     Return _prop1 
    End Get 
    Set(ByVal value As String) 
     _prop1 = value 
    End Set 
    End Property 

    Public Property Prop2() As String 
    Get 
     Return _prop2 
    End Get 
    Set(ByVal value As String) 
     _prop2 = value 
    End Set 
    End Property 

    Public Property Prop3() As String 
    Get 
     Return _prop3 
    End Get 
    Set(ByVal value As String) 
     _prop3 = value 
    End Set 
    End Property 

    Public Property Prop4() As String 
    Get 
     Return _prop4 
    End Get 
    Set(ByVal value As String) 
     _prop4 = value 
    End Set 
    End Property 
End Class 

在我的代码,我有这些对象的列表:

Dim myList as List(of myObject) 

我然后填充列表...

{的要求,这是一个有点像这样,即使填充它的方法是不相关的:-)}

Dim myFile as String = readFile(myFilename) 
Dim fileLines() as String = Split(myFile,vbCrLf) 
Dim splitLine() as String 
For each line in fileLines 
    splitLine = Split(line,"|") 
    myList.add(new myObject(splitLine(0),splitLine(1),splitLine(2),splitLine(3)) 
Next 

我需要的是一个列表,其中所有PROP1值是唯一的,所以我想能够识别任何重复的值myList.Prop1

我试过Finding Duplicates based On A Property In Object但这似乎并不违法任何东西。

我故意创建了一个已知副本的列表。使用来自上述问题的适应代码...

Dim duplicates = myList.GroupBy(Function(i) i.Prop1) _ 
         .Where(Function(x) x.Count() > 1) _ 
         .[Select](Function(x) x) 

...结果重复是“没有”,即使有一个。

在这个阶段,我不需要识别重复,只是他们在那里的事实。但是,如果是简单的将这一功能比我想在添加此

+0

你可以分享填充对象的代码吗? – dotNET

+0

重复查询代码工作正常 - 它返回具有相同属性值的项目集合 – Plutonix

这是相当简单的把所有重复的对象,来看看这个例子:

Dim myList as List(Of myObject) = New List(Of myObject) 

'Add arbitrary values (demo only) 
myList.AddRange({New myObject("A", "B", "C", "D"), New myObject("A", "C", "D", "E"), New myObject("B", "C", "D", "E"), New myObject("C", "D", "E", "F")}) 

'Get all objects where Prop1 is the same 
Dim duplicateProp1 = (From o As myObject in myList Group By Prop1 = o.Prop1 Into g = Group Where g.Count > 1 Select g.FirstOrDefault()) 

'Print all the duplicate objects (demo only) 
For Each d As myObject In duplicateProp1 
    Console.WriteLine(d.Prop1) 
Next 

小提琴:Live Demo

+0

嗨大卫。谢谢你。作品一种享受! – Tym