אני אכן לא קראתי מספיק בעיון את הקוד שלך (לתשומת לבך, קוד זה לא צורה להבהיר מה אתה רוצה לעשות).
אז אכן הDictionary ייתן לך לכאורה ביצועים משופרים למציאת הערך (פי שתיים).
חוץ מזה הקוד שלך באמת לוקה ביעילות בזה: במידה והמפתח קיים הוא מאתר פעמיים (אינדקס, ואח"כ לפי KEY).
היית צריך לעשות ככה:
Sub mySub(ByVal list As List(Of myType))
For Each myType As myType In list
' בודק אם המפתח כבר קיים
Dim key As List(Of Integer)
If dic.TryGetValue(myType.A, key) = False Then
key = New List(Of Integer)
dic.Add(myType.A, key)
End If
dic(myType.A).Add(myType.B)
Next
End Sub
(בטעות בקוד לשי הטיפוס הוא int במקום מערך של int, אבל העיקרון זהה).
אם אתה מקבל את כל הנתונים בבת אחת אני גם חושב שעדיף לרכז לבסוף.
תוכל להיעזר בשאילתת לינק לקיבוץ משהו כזה:
Sub mySub(ByVal list As List(Of myType))
Dim q = From el In list
Group el By el.A Into grp = Group
Select New With {.Key = A, .Ints = grp.SelectMany(Function(x) x.B)}
...
End Sub
פורסם במקור בפורום CODE613 ב07/04/2014 15:53 (+03:00)