обновить/изменить значение массива (быстро)

Модель данных

class dataImage {
    var userId: String
    var value: Double
    var photo: UIImage?
    var croppedPhoto: UIImage?

init(userId:String, value: Double, photo: UIImage?, croppedPhoto: UIImage?){
    self.userId = userId
    self.value = value
    self.photo = photo
    self.photo = croppedPhoto
   }

}

Контроллер просмотра

var photos = [DKAsset]() //image source
var datas = [dataImage]()

var counter = 0
    for asset in photos{
        asset.fetchOriginalImageWithCompleteBlock({ image, info in // move image from photos to datas

            let images = image
            let data1 = dataImage(userId: "img\(counter+1)", value: 1.0, photo: images, croppedPhoto: images)
            self.datas += [data1]
            counter++

        })
    }

из этого кода, скажем, у меня есть 5 данных:

 - dataImage(userId: "img1", value: 1.0, photo: images, croppedPhoto:
   images)
 - dataImage(userId: "img2", value: 1.0, photo: images, croppedPhoto:
   images)
 - dataImage(userId: "img3", value: 1.0, photo: images, **croppedPhoto:
   images**)
 - dataImage(userId: "img4", value: 1.0, photo: images, croppedPhoto:
   images)
 - dataImage(userId: "img5", value: 1.0, photo: images, croppedPhoto:
   images)

Как изменить/обновить значение croppedImage в img3?


person Aldo Lazuardi    schedule 20.01.2016    source источник
comment
Дружище, пожалуйста, уточни свой вопрос. Можете ли вы объяснить актив на фотографиях   -  person Mr. Bean    schedule 20.01.2016
comment
подожди обновлю, спасибо   -  person Aldo Lazuardi    schedule 20.01.2016
comment
Отвечает ли это на ваш вопрос? Найдите элемент и измените значение в пользовательском массиве объектов - Быстро   -  person Jeff    schedule 27.06.2020


Ответы (1)


self.datas[2] = dataImage(userId: "img6", value: 1.0, photo: images, croppedPhoto:  images)

Это заменит третий объект в массиве новым.

or

self.datas[2].value = 2.0

Это изменит значение объекта dataImage на userId "img3".

Отвечает ли это на ваш вопрос?

Если вам нужно искать конкретное значение в userId, то вам гораздо лучше использовать словарь (связанный массив), а не (индексированный) массив.

var datas = [String, dataImage]()
...
self.datas["img\(counter+1)"] = ...

И вы получаете доступ к нему таким же образом.

self.datas["img3"].value = 2.0

И, пожалуйста, переименуйте класс imageData в ImageData. Имена классов начинаются с заглавных букв.

person Hermann Klecker    schedule 20.01.2016
comment
что если я не знаю номер массива? Могу ли я изменить его на основе идентификатора пользователя? (изображение3) - person Aldo Lazuardi; 20.01.2016
comment
Да. Вы можете перебирать массив и останавливаться там, где userId совпадает с тем, который вы ищете, или вы используете словарь вместо массива и напрямую получаете доступ к объекту. Смотрите мой ответ. Это все там. - person Hermann Klecker; 20.01.2016
comment
привет @HermannKlecker спасибо за ответ, у меня есть еще один вопрос, связанный с этой страницей. не стесняйтесь видеть это stackoverflow.com/questions/34915370/ - person Aldo Lazuardi; 21.01.2016
comment
Итерация по длинному списку с использованием for очень неэффективна. я бы использовал hasmap - person Yaroslav Dukal; 14.02.2018
comment
Что ты имеешь в виду под словом "сохранить"? Вы бы сохранили его, как и любой другой массив. И то, как его сохранить, во многом зависит от вашего постоянного хранилища. - person Hermann Klecker; 26.05.2018