【问题标题】:Searching Array of dictionary of Array (some model) in iOS在iOS中搜索Array(某些模型)字典的数组
【发布时间】:2018-01-12 09:51:17
【问题描述】:

我有一个关于在数组字典数组中搜索的查询。

我正在调用 Web 服务并从服务器获取响应,响应后我创建了一个模型名称“Merchant Model”并按顺序放置所有数据。

这里是 MerchantModel

struct MerchantModel {
    let idString : UInt
    var squareImageUrlString : String
    let rectangleImageUrlString : String
    let nameString : String
    let stateDescriptionString : String

}

以下是我使用 MerchantModel 从服务创建的数据

    [
        ["D": [MerchantModel(idString: 70000032, squareImageUrlString: "http:wigroup/wiplatform/uploads/2016-09-26_153901_1474904341_68899.png?uid=1474904346379", rectangleImageUrlString: "http://latform/uploads/2016-09-26_153556_1474904156_79221.jpg?uid=1474904164349", nameString: "ABCD ", stateDescriptionString: "Active")]],
        ["K": [MerchantModel(idString: 22, squareImageUrlString: "http://wigroup/wigroup/wiplatform/uploads/2017-01-12_083720_1484210240_77692.jpg?uid=1484210329594", rectangleImageUrlString: "http://r/uploads/2017-01-12_084109_1484210469_83189.jpg?uid=1484210491620", nameString: "ABCD Online", stateDescriptionString: "Active")]],
        ["P": [MerchantModel(idString: 70000013, squareImageUrlString: "http://form/uploads/2016-11-02_093929_1478079569_70996.jpg?uid=1478079577342", rectangleImageUrlString: "http://rad2rm/uploads/2016-11-02_093948_1478079588_71976.jpg?uid=1478079594170", nameString: "XYZ \'n Pay", stateDescriptionString: "Active"), MerchantModel(idString: 70000068, squareImageUrlString: "http://igroup/wiplatform/uploads/2016-08-11_102601_1470911161_64234.png", rectangleImageUrlString: "http://roup/wiplatform/uploads/2016-08-11_102632_1470911192_47769.png", nameString: "XABCD Pay ", stateDescriptionString: "Active")]],
        ["R": [MerchantModel(idString: 19, squareImageUrlString: "http://group/wiplatform/uploads/2015-06-09_133237_1433856757_50883.jpg", rectangleImageUrlString: "http://raads/2015-06-09_133217_1433856737_47358.jpg", nameString: "Test", stateDescriptionString: "Active")]]
]

现在我必须对这个数组执行搜索。我把下面的代码写成

 func filter(array : [[String : [MerchantModel]]], byString filterString : String) -> [[String : [MerchantModel]]]? {
  return array.filter({ (dictData : [String : [MerchantModel]]) -> Bool in
                let values = dictData.values
                values.filter({ ([MerchantModel]) -> Bool in
                    $0.nameString == filterString
                })
            })
    }

但是出现错误

“'[MerchantModel]' 类型的值没有成员 'nameString'”

请建议我如何在这个数组上执行搜索。我试图避免 Swift 中的循环(for、while 等)。

【问题讨论】:

  • values.filter({ ([MerchantModel]) -> Bool in $0.nameString == filterString }) $0 中是MerchantModel 的数组。我猜MerchantModel 有一个属性nameString,但[MerchantModel](一个数组)没有。
  • 尝试向this寻求帮助。希望对您有所帮助。
  • @Larme 更新了我的问题。

标签: ios swift


【解决方案1】:

替换:

values.filter({ ([MerchantModel]) -> Bool in
    $0.nameString == filterString
})

与:

values.filter({ ([MerchantModel]) -> Bool in
    $0.filter({ (MerchantModel) -> Bool in
        $0.nameString == filterString
    )}
})

【讨论】:

    【解决方案2】:

    问题是你正在初始化一个对象数组

    ["D": [MerchantModel(idString: 70000032, squareImageUrlString: "http:wigroup/wiplatform/uploads/2016-09-26_153901_1474904341_68899.png?uid=1474904346379", rectangleImageUrlString: "http://latform/uploads/2016-09-26_153556_1474904156_79221.jpg?uid=1474904164349", nameString: "ABCD ", stateDescriptionString: "Active")]
    

    而不是试图从中获取nameString

    要遍历数组,请使用 smth like

    func filter(array : [[String : [NSDictionary]]], byString filterString : String) -> [[String : [NSDictionary]]]? {
        return array.filter({ (dictData : [String : [NSDictionary]]) -> Bool in
            let values = dictData.values
            $0.filter({ (MerchantModel) -> Bool in
                $0.nameString == filterString
            )}
        })
    }
    

    【讨论】:

      【解决方案3】:

      内部过滤器必须返回布尔值。试试这个。

      func filter(array : [[String : [MerchantModel]]], byString filterString : String) -> [[String : [MerchantModel]]]? {
          return array.filter { (dictData) -> Bool in
              dictData.values.filter({ (subarray) -> Bool in
                  subarray.filter { $0.nameString == filterString }.count > 0
              }).count > 0
          }
      }
      

      还有一个班轮

      return array.filter { $0.values.filter { $0.filter { $0.nameString == filterString }.count > 0 }.count > 0 }
      

      游乐场测试结果。

      let array = [["D": [MerchantModel(idString: 70000032, squareImageUrlString: "http:wigroup/wiplatform/uploads/2016-09-26_153901_1474904341_68899.png?uid=1474904346379", rectangleImageUrlString: "http://latform/uploads/2016-09-26_153556_1474904156_79221.jpg?uid=1474904164349", nameString: "ABCD ", stateDescriptionString: "Active")]],
                   ["K": [MerchantModel(idString: 22, squareImageUrlString: "http://wigroup/wigroup/wiplatform/uploads/2017-01-12_083720_1484210240_77692.jpg?uid=1484210329594", rectangleImageUrlString: "http://r/uploads/2017-01-12_084109_1484210469_83189.jpg?uid=1484210491620", nameString: "ABCD Online", stateDescriptionString: "Active")]],
                   ["P": [MerchantModel(idString: 70000013, squareImageUrlString: "http://form/uploads/2016-11-02_093929_1478079569_70996.jpg?uid=1478079577342", rectangleImageUrlString: "http://rad2rm/uploads/2016-11-02_093948_1478079588_71976.jpg?uid=1478079594170", nameString: "XYZ \'n Pay", stateDescriptionString: "Active"), MerchantModel(idString: 70000068, squareImageUrlString: "http://igroup/wiplatform/uploads/2016-08-11_102601_1470911161_64234.png", rectangleImageUrlString: "http://roup/wiplatform/uploads/2016-08-11_102632_1470911192_47769.png", nameString: "XABCD Pay ", stateDescriptionString: "Active")]],
                   ["R": [MerchantModel(idString: 19, squareImageUrlString: "http://group/wiplatform/uploads/2015-06-09_133237_1433856757_50883.jpg", rectangleImageUrlString: "http://raads/2015-06-09_133217_1433856737_47358.jpg", nameString: "Test", stateDescriptionString: "Active")]]]
      
      let filterString = "ABCD "
      if let results = filter(array: array, byString: filterString) {
          print(results)
      }
      

      【讨论】:

        猜你喜欢
        • 2013-12-18
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 2014-06-17
        • 2014-06-11
        • 2015-03-28
        • 2016-03-11
        相关资源
        最近更新 更多