WedX - журнал о программировании и компьютерных науках

Как получить элементы NSDictionary, хранящиеся в NSMutableArray в Swift?

Я сохранил свои контакты в виде словаря в изменяемом массиве с помощью этого метода:

 var addressBookReff: ABAddressBookRef = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()
    var arrOfDictContacts:NSMutableArray = NSMutableArray()
    let people:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBookReff).takeRetainedValue()
    for person in people{
        if  let name:String = ABRecordCopyValue(person, kABPersonFirstNameProperty)?.takeRetainedValue() as? String {
            let numbers:ABMultiValue = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue()
            if let number:String = ABMultiValueCopyValueAtIndex(numbers,0)?.takeRetainedValue() as? String {
                arrOfDictContacts.addObject(["\(name)":"\(number)"])
            }
        }
    }

Здесь arrOfDictContacts — это мой изменяемый массив, который содержит имя и номер в виде словаря. Так :

 arrOfDictContacts = ({ my = 12131;}, { doctor = 54445;}, { AL = 543212601;},  { customer = 121; } }

Теперь у меня есть еще один массив имен, как

arrOfNames = [my, AL]

Я хочу получить соответствующие номера arrOfNames от arrOfDictContacts

Ожидаемый результат:

  arrOfNumbers = [12131, 543212601]  

Как я могу это сделать?


Ответы:


1

Редактировать:

Поскольку ваш массив содержит словари, это можно сделать, сравнив каждый из словарей с вашим массивом. Как показано ниже:

var arrOfNumbers : [String] = []
for dict in arrOfDictContacts {
    for name in arrOfNames {
        if let value = dict[name] as? String {
            arrOfNumbers.append(value)
        }
    }
}
08.09.2015
  • выдает ошибку в третьей строке name, что String is not convertible to Int 08.09.2015
  • Проверьте мое редактирование. Поскольку значения вашего словаря являются строковыми, массив результатов должен быть [String]. 08.09.2015
  • Проверь это сейчас. Дело в том, что у вас есть массив словарей, но отредактированная версия должна работать на вас сейчас. 08.09.2015
  • Теперь ошибок нет, но я тоже не получаю вывода. если я напечатаю arrOfNumbers , получу [ ]. Если я поставлю точку останова внутри двух циклов for, она не остановится, я думаю, она не войдет в цикл for 08.09.2015
  • Может быть, ваш arrOfNames пуст? Попробуйте объявить его как let arrOfNames = ["my", "AL"]. Работал на меня. 08.09.2015
  • нет, он не пустой. Если я его распечатаю, я увижу вывод. 08.09.2015
  • Не уверен, что вы делаете неправильно. Код, который я предоставил, работал отлично. Либо ваши arrOfDictContacts или arrOfNames пусты, либо их имена не соответствуют контакту. Проверьте свои данные и повторите попытку. 08.09.2015
  • Ты был прав. Мой arrOfDictContacts был пуст, так как я неосознанно объявил дубликат. Теперь он работает как шарм. Спасибо :) 08.09.2015
  • Привет, извините, этот код работает с получением всех чисел в arrOfDictContacts. Мне нужны только числа с именем массива «arrOfNames». 10.09.2015
  • Нет, он извлекает только совпадающие значения. Я проверил это на игровой площадке, и это сработало, но это очевидно даже без запуска кода. 10.09.2015
  • можно зайти в чат? я не знаю, чтобы начать чат 10.09.2015
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

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


    Для любых предложений по сайту: [email protected]