簡體   English   中英

提取字典中的分析表數據,過濾並進行數學運算

[英]Fetch parse table data in dictionary, filter and do math operation

我是獨立開發人員,幾個月前開始學習編程。 目前,我正在嘗試尋找一種獲得業務評級並在需要時向用戶顯示的方法。 我將Parse.com用作后端,並具有包含以下列(鍵)的分析表:

等級(類型:數字)-使用浮點值

BusinessName(類型:字符串)

BusinessReviewText(類型:字符串)

現在,我將數據檢索為:

//Declaring empty dictionary
    var businessReview = [[String:Float]]()
    var businessReviewText = [[String:String]]()

//Parse query
 var query: PFQuery = PFQuery(className: "Business")
        query.whereKey("ratingBool", equalTo: true) // just checking which businesses have been reviewed by users
        query.findObjectsInBackgroundWithBlock{(objects:[AnyObject]?, error: NSError?) -> Void in
            if (error == nil) {
                for object in objects as! [PFObject!]{

                    var bN:AnyObject = object["BusinessName"]!
                    var bR: AnyObject = object["Rating"]!
                    var bRT: AnyObject = object["BusinessReviewText"]!

                    self.businessName.addObject(bN)
                    self.businessRating.addObject(bR)
                    self.businessRatingText.addObject(bRT)   
                    self.businessReview.append(["\(bN)":bR as! Float])
                    self.businessReviewText.append(["\(bN)":"\(bRT)"])
                }
// Gives me Key: BusinessName and its rating value: floatValue as output
                println("\(self.businessReview)") // I get the output as [[businessA: 4.0], [businessA: 4.0], [businessB: 5.0], [businessC: 5.0], [businessC: 3.5], [businessC: 3.5], [businessD: 3.5]]

// Gives me Key:BusinessName and its review Value:ReviewText as output
                println("\(self.businessReviewText)") // I get the output as [[businessA: Good job], [businessA: High], [businessC: Awesome service! A++], [businessC: Good service!], [businessC: Good but can improve], [businessD: "NO REVIEW"], [businessD: Ok ]]
            }
        }
    }

現在,我有以下問題:1.現在如何使用鍵值過濾每個公司名稱,以便執行數學運算,例如,要獲得businessC的評級:(所有businessC評級/businessC.count的加法),即: ((5 + 3.5 + 3.5)/ 3)= 4

注意:在這種情況下,我不知道用戶正在檢查哪些企業評級(例如:用戶可以搜索中國餐館,並且他可以看到中國餐館企業評級的所有評級)。 因此,我很樂意在一項結果中審核所有業務(這是正確的做法嗎?)

  1. 這是獲得評分的正確方法嗎? 如果沒有,那有什么選擇呢? 有任何教程嗎?

對不起,如果我描述性太強。 但是在搜索堆棧溢出時,有時會發現很難理解人們提出的問題。 因此,我嘗試提供所需的盡可能多的信息。

提前致謝。

您可以創建兩個NSDictionary。 第一個具有NSString類型的鍵和NSArray類型的值(例如Key:BusinessName,Value:Array of Ratings)。 第二個具有NSString類型的鍵和Integer類型的值(例如Key:BusinessName,Value:Average Rating)。 然后,在對企業進行迭代時,將等級插入與第一個詞典中與businessName鍵對應的數組中。 接下來,遍歷第一個字典中的鍵,並遍歷值中數組中的對象。 最后,對特定業務的評分進行平均,然后將平均值插入與businessName鍵對應的第二個詞典中。 現在您有了一個businessNames字典,它們的值是平均值。

您的問題可以通過多種方法解決,但這只是思考。 該網站上的某人可能可以為您提供更有效的方法。

偽代碼:

Dictionary[String, Array] allRatings
Dictionary[String, Integer] averageRatings

for each business
    if allRatings does not contain business.name
        Array ratings
        ratings add business.rating
        allRatings set key equal to business.name and set value equal to ratings
    else
        Array ratings = allRatings get array for bussiness.name
        ratings add business.rating
end for each

for each key called businessName in allRatings
    Array ratings = allRatings get value for businessName

    int average = 0

    for each rating in ratings
        average += rating
    end for each

    average /= ratings.count

    averageRatings set key equal to businessName and set value equal to average
end for each

從理論上講,我認為時間復雜度應為O(n ^ 2)。 這是體面的,但沒有那么好。

PS:我覺得這可能有問題,但是除非經過測試,否則我不確定。

暫無
暫無

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

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