Как добавлять значения в разнонаправленный массив

#arrays #swift

#массивы #swift

Вопрос:

Я читаю некоторые значения, сгенерированные разными маяками, скажем, beacon 1 и beacon 2. Я хочу собирать значения каждого маяка отдельно.

Я думаю, что если есть способ использовать оператор where, было бы проще, например, получить значения, где beacon = 1, а затем где beacon = 2

Насколько я понимаю: Сначала я создал разнонаправленный массив:

 var values = [[Int]]()
var tempBeacon = [Int]
 

Затем цикл for для сбора некоторых значений для i-маяков:

 
for i in 0...beaconCount-1 {
   let beacon = beacons[i]
   values[i] = tempBeacon.append(beacons[i].value)
}
 

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

Ответ №1:

Я бы предпочел подойти к этой проблеме как к словарю массивов. Каждый ключ в словаре будет представлять маяк, а массив, хранящийся в каждом ключе, будет содержать значения для этого маяка. Использование словаря упрощает поиск маяка, для которого вам нужно добавить новую запись.

Вот функциональный пример с игровой площадки:

 func addBeaconEntry(beaconName: String, newValue: Int) {
    if beaconData[beaconName] == nil {
        // Beacon is not yet in dictionary, so we create an array
        beaconData[beaconName] = [Int]()
    }
    beaconData[beaconName]?.append(newValue)
}

// Dictionary of array of integers for beacon values
var beaconData = [String: [Int]]()
addBeaconEntry(beaconName: "beacon 1", newValue: 10)
addBeaconEntry(beaconName: "beacon 2", newValue: 20)
addBeaconEntry(beaconName: "beacon 3", newValue: 30)
addBeaconEntry(beaconName: "beacon 1", newValue: 1120)

print(beaconData)
print("Data for beacon 1:")
print(beaconData["beacon 1"] ?? [0])

 

Комментарии:

1. Спасибо, именно того покоя мне не хватало. Мне нравится ваш подход.