В Python я делаю "dictionary = {" ключ ": [значение, значение], (и т. Д.)}" Как мне сделать это в Visual Basic? - PullRequest
0 голосов
/ 03 октября 2018

Я делаю небольшую приключенческую игру для своего класса информатики в VB, и для инвентаризации персонажа мне нужно знать, как составить словарь (чтобы у меня было название предмета) и списокв качестве значений элемента (список будет выглядеть примерно так: obj = [Количество, Damage_Dealt (или Health_Received)]).Я провел некоторое исследование и попытался сделать

Dim knife As New List(Of Integer)
knife.add(1)#the first one is how many knives and the second is the dmg
knife.add(1)

Dim inv As New Dictionary(Of String, List(Of Integer))
inv.add("knife", knife)

, но некоторые вещи отсутствуют, или, надеюсь, есть более простой способ сделать это.Даже если есть возможность создать 2 или 3-й массив (например, inv = [[knife, 1, 1], [bread, 2, 0]])

, я был бы признателен за самый простой способ изменения питона

dictionary = {"key": [value, value], (etc)}

в VB Спасибо вadvance

Я забыл упомянуть, что все, что есть в подпрограмме в классе.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Вот основной пример того, как выполнить то, что вы ищете.

Public Sub TestData()
        //Create List and populate it

        Dim list As New List(Of KeyValuePair(Of String, List(Of Integer)))
        Dim integerList As List(Of Integer) = New List(Of Integer)
        integerList.Add(1)
        integerList.Add(2)

        list.Add(New KeyValuePair(Of String, List(Of Integer))("Test", integerList))



        //Iterate through the list to get data

        For Each pair As KeyValuePair(Of String, List(Of Integer)) In list
            Dim key As String = pair.Key

            Dim newIntegerList As New List(Of Integer)
            For Each value As Integer In pair.Value
                newIntegerList.Add(value)
            Next
        Next
    End Sub

Редактировать: Пришлось изменить комментарии на комментарии C #, так как им не нравились комментарии VB.Но, очевидно, вы бы избавились от них.

0 голосов
/ 03 октября 2018

Есть способы сделать это, создав словарь списков или словарь массивов.Но если вам нужно полагаться на индексы, чтобы найти правильное свойство, код станет грязным.

Несколько лучше использовать Tuples ;тем не менее, их более целесообразно использовать для временного хранения, для промежуточных результатов и для функций, возвращающих более одного значения.

Предметы - важный аспект вашей игры.Создайте класс предметов!Это позволит вам гораздо легче справляться с предметами

Public Class Item
    Property Quantity As Integer
    Property Damage As Integer
    Property Health As Integer
End Class

Вы можете инициализировать его с помощью

Dim Items As New Dictionary(Of String, Item) From {
   {"knife", New Item With {.Quantity = 1, .Damage = 0, .Health = 100}},
   {"arrow", New Item With {.Quantity = 5, .Damage = 0, .Health = 100}}
}

Теперь вы можете легко получать свойства

Dim knifeDamage = Items("knife").Damage

Классы имеют и другие преимущества: вы можете добавлять к нему Subs и Functions, вы можете получать более специфические типы элементов, обладающие свойствами, которые применяются только к ним, и многое другое.

0 голосов
/ 03 октября 2018

Вы можете полностью создать новый список (Of Dictionary (Of String, List (Of Integer)))) и заполнить его.

Кажется, вы уже знаете код.Получайте удовольствие от его реализации!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...