2015-11-03 2 views
0

Swift 2.0, Xcode 7,1Looping JSON из базы данных Разбор дает неправильные результаты

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

Фильтрация работает, но по какой-то причине моя петля не дает мне точных результатов.

Анализировать Строка 1:

[{ "Клиент": "9sKSDTG7GY", "Продукт": "Burger", "Количество": "2"}]

Анализировать Ряд 2 :

[{ "Клиент": "nyRHskbTwG", "Продукт": "Sizzler", "Количество": "2"}, { "Клиент": "nyRHskbTwG", "Продукт": "Biryani" , "Количество": "2"}]

Получил эти данные и сохранил в self.custome, self.fQuantity и self.fName переменную.

Петля Я использую, как показано ниже:

let cD = self.customer 
       print("Customer data before filtering Unique value: \(self.customer)") 
       self.uniqueValues = self.uniq(cD) //Calling a function to get unique values in customer data 

    print("Customer data after filtering Unique value: \(self.uniqueValues)") 
      var newArray = [[String]]() 

      for var count = 0; count < self.customer.count; count++ { 
       for sID in self.uniqueValues { 
        if sID.containsString(self.customer[count]){ 

         let dicValue = [String(self.fQuantity[count]), String(self.fName[count])] 
         newArray.append(dicValue) 

         self.dicArray.updateValue(newArray, forKey: sID) 
        } else { 
         // Do nothing... 
        } 
       } 
      } 

      print("Dictionary Values: \(Array(self.dicArray.values))") 
      print("Dictionary Keys: \(Array(self.dicArray.keys))") 

печатная продукция, как показано ниже:

Данные клиента перед фильтрацией уникальное значение: [ "9sKSDTG7GY", "nyRHskbTwG", " nyRHskbTwG "]

данные о клиенте после фильтрации уникального значения: [" 9sKSDTG7GY», "nyRHskbTwG"]

Значения слова: [[[2 "," Burger "], [" 2 "," Sizzler "], [" 2 "," Biryani "]], [[" 2 "," Burger "]] ]

словарь Ключи: [ "nyRHskbTwG", "9sKSDTG7GY"]

Может кто-то выяснить, что я делаю неправильно?

ответ

1

Как предложил @David, вам необходимо поменять внешний и внутренний контуры. Но мне также пришлось удалить все значения, содержащиеся в newArray, если в цикле if ничего не найдено. Так вот как я заработал.

let cD = self.customer 
       print("Customer data before filtering Unique value: \(self.customer)") 
       self.uniqueValues = self.uniq(cD) //Calling a function to get unique values in customer data 

    print("Customer data after filtering Unique value: \(self.uniqueValues)") 
     var newArray = [[String]]() 

     for sID in self.uniqueValues { 
for var count = 0; count < self.customer.count; count++ { 
       if sID.containsString(self.customer[count]){ 

        let dicValue = [String(self.fQuantity[count]), String(self.fName[count])] 
        newArray.append(dicValue) 

        self.dicArray.updateValue(newArray, forKey: sID) 
       } else { 
        newArray.removeAll() // ****** Adding this works for me 

       } 
      } 
     } 

     print("Dictionary Values: \(Array(self.dicArray.values))") 
     print("Dictionary Keys: \(Array(self.dicArray.keys))") 
1

Вы отфильтровали данные, но просматриваете список фильтров без фильтрации.

for var count = 0; count < self.customer.count; count++ { 
+0

Извините, если я не понимаю, или я использую неправильную модель. Но чтобы получить весь заказ, я должен пройти через нефильтрованный список. Как вы можете видеть, у меня есть два заказа в строке 2 тем же Клиентом. Поэтому я использую фильтрованный массив для прокрутки нефильтрованных ключей, чтобы получить значения. Возможно, я не могу объяснить это. Но можете ли вы, пожалуйста, взглянуть еще раз? –

+0

В этом случае, возможно, вы хотите изменить порядок ваших циклов: внешний цикл будет проходить через уникальный идентификатор клиента, внутренний цикл собирает все заказы для этого идентификатора. –

+0

Я просто попробовал это. Получение такого же результата даже после разворота? Это правильный путь к петле? Я посмотрел на него, и он должен работать, но не уверен, почему я неправильно понимаю ценности. Заказ от Row 2 как-то привязан к Row 1 клиенту. Странный. –

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