簡體   English   中英

NSFetchRequest:返回包含字典嵌套數組的字典

[英]NSFetchRequest: Return dictionary with nested arrays of dictionaries

實體:名稱,類別,日期,值

我查詢的結果字典應該是:

{
  Date1: [ 
            {
              Category1, 
              TotalValueOfCategory1InDate1
            }, 
            {
              Category2, 
              TotalValueOfCategory2InDate1
            }, 
            ... 
         ]
  Date2: [ 
            {
              Category1, 
              TotalValueOfCategory1InDate2
            }, 
            {
               Category2, 
               TotalValueOfCategory2InDate2
            }, 
            ... 
          ]
  ...
}

我試過這個查詢:

let expr = NSExpressionDescription()
    expr.name = "total"
    expr.expression = NSExpression(format: "@sum.amount")
    expr.expressionResultType = .doubleAttributeType

    let expressions: [AnyObject] = ["category" as AnyObject, expr]
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "EntityName")
    request.resultType = .dictionaryResultType
    request.propertiesToGroupBy = ["date", "category"]
    request.propertiesToFetch = expressions

    let res = getDictionaryFromRequest(request: request)

但結果是(顯然):

[["total": val, "date": date1, "category": category1], ["total": val, "date": date1, "category": category2], ["total": val, "date": date2, "category": category1], ["total": val, "date": date2, "category": category2], ...]

要使用此數據結構,我應該為每個日期進行嵌套循環,以恢復具有相同日期的其他類別的值...

我看不出有任何方法可以用不同的表達式來解決這個問題,因為這是group by的工作方式,因此除非其他可能更了解NSExpressionDescription在這里有解決方案,否則這是返回的當前結果的“解決方案”。

var dict: [String: [[String: Any]]] = [:]
for item in res {
    if let date = item["date"] as? String, 
       let category = item["category"] as? String, 
       let total = item["total"] as? Int {
        let newItem: [String: Any] = ["category":  category, "total": total]
        if dict.contains(where: { $0.key == date }) {
            dict[date]?.append(newItem)
        } else {
            dict[date] = [newItem]
        }
    }
}

PS我測試時很懶,所以我的日期和類別項目都是字符串DS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM