#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. Спасибо, именно того покоя мне не хватало. Мне нравится ваш подход.