2015-12-12 2 views
-1

У меня есть массивы, структуры:как получить значение из словаря в СВИФТ

var data = [["name" : "Piter", "pubDate" = "01"], ["name" : "Tomas", "pubDate" : "02"], ["name" : "Troy", "pubDate" : "03"]] 

var newData = [[String:String]]? 

и теперь я хотел бы проверить, если есть, например, «PubDate» = 01, если да, то я бы как добавить эту строку (все данные из этой строки) в новую таблицу. Я делаю что-то вроде этого:

for _ in data{ 

    if data[indexPath.item]["pubDate"] == "01"{ 

    newData!.append(data[indexPath.item]) 

    } 

} 

но мой код не работает. Есть ли у вас какие-либо идеи, как мне найти значение, которое мне нужно, и добавить целую строку в новый массив?

ответ

1

Есть опечатка в коде:

["name" : "Piter", "pubDate" = "01"] 

Оно должно быть:

["name" : "Piter", "pubDate" : "01"] 

У меня есть рабочее решение здесь:

 let data = [["name" : "Piter", "pubDate" : "01"], ["name" : "Tomas", "pubDate" : "02"], ["name" : "Troy", "pubDate" : "03"]] 

     var newData = [[String:String]]() 

     for dictionary in data { 
      if dictionary["pubDate"] == "01" { 
       newData.append(dictionary) 
      } 
     } 

     print(newData); 
+0

отлично работает! funy is, я сделал это раньше, но у меня был дополнительный массив newData, и это было проблемой. THX для подсказки! – Berike

+0

это работает, но я вижу, что этот цикл не останавливается. Я не знаю, почему – Berike

1

Вы можете легко сделать, используя filter метод:

let newData = data.filter { $0["pubDate"] == "01" } 

Нет необходимости в цикле, просто один лайнер.

+0

Хорошо, но я хотел использовать код, который был у OP. –

+0

, но когда я делаю newData.append (dataFiltered) recive information "не может преобразовать значение типа [[String: String]]? В ожидаемый тип аргумента [String: String]" – Berike

+0

@Berike я изменил код немного, что вы get *** is *** уже 'newData'! – luk2302

0

Перечислять можно массив словаря подобным образом

let dataArray:Array<Dictionary<String,String>> = [["name" : "Piter", "pubDate" : "01"], ["name" : "Tomas", "pubDate" : "02"], ["name" : "Troy", "pubDate" : "03"]] 

    var newData = [String:String]() 

    for dict in dataArray{ 

     for (key,value) in dict{ 

      if value == "01"{ 

       newData[key] = value 
       print(newData) 
      } 

     } 

    } 

Надежда решит вашу проблему

Смежные вопросы