IT/DEV Study

[VB] Dictionary Add & Remove Test (feat. LINQ 람다식)

Ella.J 2022. 9. 13. 14:47
728x90
반응형

 

요즘 VB (a.k.a Visual Basic)로 개발 중인데,

사용하는 데 있어서 조금 헷갈리는 부분들을 정리하려고 한다.

 

Dictionary를 사용해서 Array의 기능 + List의 기능을 활용하려고 했는데,

VB가 익숙치 않다보니 LINQ 람다식 사용에서 많이 당황했다.

VB에서는 람다식을 사용하기 위해서는 Function(x)를 꼭 써줘야 한다는 점!

 

나머지 코드 내용은 아래 주석과 실행결과를 참고,, : )

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Public Class Form1
    Public dict As Dictionary(Of Integer, Integer)
    Public MaxCount As Integer = 7
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        dict = New Dictionary(Of Integer, Integer)
        AddDict(10)
        AddDict(11)
        AddDict(12)
        AddDict(13)
        AddDict(14)
        AddDict(15)
        removeDict(13)
        AddDict(16)
        removeDict(14)
        AddDict(17)
    End Sub
 
    Public Sub AddDict(ByVal val As Integer)
        If dict.ContainsValue(val) Then
            '기존에 해당하는 Value 값이 있으면 종료
            Exit Sub
        End If
        For index = 0 To MaxCount 'MaxCount는 임의의 값으로 Dictionary 최대값을 0-7로 정함
            If Not dict.ContainsKey(index) Then
                '빈 Key 값에 할당하기 위해 기존에 Key가 존재하는지 확인 후 Add
                dict.Add(index, val)
                Exit Sub
            End If
        Next
    End Sub
 
    Public Sub removeDict(ByVal val As Integer)
        If dict.ContainsValue(val) Then
            '지우려는 Value의 item(Key, Value) 값을 가져와서 item.Key로 해당 Key 값을 알 수 있음
            'AddDict에서 Value 중복을 방지했기 때문에 dict.First로 가져와도 됨
            Dim item = dict.First(Function(x) x.Value = val)
            dict.Remove(item.Key)
        End If
    End Sub
End Class
 
cs

 

Dictionary Add & Remove 실행결과 참고

 

그리고 Dictionary 같은 경우에는 Key를 기반으로 자동으로 Sorting 정렬된다.

그래서 위의 실행결과를 보면,

13이 들어있던 [3, 13] 아이템을 삭제하고 그 다음에 16 값을 넣었을 때

위에서 빈 값이 있으면 그 자리에 넣게했기 때문에,

[3, 16]으로 들어가고 Dictionary가 자동으로 정렬되는 것을 확인할 수 있다.

 

728x90
반응형