Переименование повторяющихся записей свойств в списке объектов - PullRequest
0 голосов
/ 22 января 2019

У меня есть список объектов, где каждый объект содержит свойство String.Это свойство String должно быть уникальным, поэтому я попытался добавить к дублирующемуся возрастающий номер.Прежде всего я подумал, что это может помочь мне, но это не списки объектов, а все попытки перевести код в vb не увенчались успехом, поэтому я попытался по-другому.

Object1.String = "Test"
Object2.String = "Test" 

должно быть преобразовано в

Object1.String = "Test"
Object2.String = "Test1"

Это то, что я пробовал:

Module Module1

    Sub Main()
        Dim obj1 As New TestCls
        Dim obj2 As New TestCls
        Dim obj3 As New TestCls

        obj1.p1 = "Test"
        obj2.p1 = "Test1"
        obj3.p1 = "Test"

        Dim lstmp As New List(Of TestCls)
        lstmp.Add(obj1)
        lstmp.Add(obj2)
        lstmp.Add(obj3)

        For Each elementA As TestCls In lstmp
            For Each elementB As TestCls In lstmp
                If elementA.p1 = elementB.p1 Then
                    elementB.p1 = elementB.p1 & 1
                End If
            Next
        Next
        Dim i As Integer = 0
    End Sub
End Module

Class TestCls
    Public Property p1 As String
End Class

Но в результате получаются Test1 и Test111 и еще больше путают смного предметов.Кто-нибудь, кто может помочь мне здесь?

1 Ответ

0 голосов
/ 22 января 2019

Вы должны увеличивать его, а не всегда объединять 1. Я бы использовал словарь для подсчета вхождений каждого p1.Это также предотвращает ошибку, сгенерированную вами p1 s:

Dim p1Counter = New Dictionary(Of String, Int32)

For Each obj In lstmp
    Dim p1Count As Int32
    Dim containsP1 = p1Counter.TryGetValue(obj.p1, p1Count)
    If containsP1 Then
        p1Count += 1
        Dim newP1 = obj.p1 & p1Count
        While p1Counter.ContainsKey(newP1)
            p1Count += 1
            newP1 = obj.p1 & p1Count
        End While
        obj.p1 = newP1
    Else
        p1Count = 1
    End If
    p1Counter(obj.p1) = p1Count
Next
...