【问题标题】:Add up all values from an NSArray and find the average [duplicate]将 NSArray 中的所有值相加并找到平均值 [重复]
【发布时间】:2013-06-06 10:57:38
【问题描述】:

我正在使用以下内容来获得以下输出:

    2013-06-06 11:44:27.325 [2570:907] Rating: 0
    2013-06-06 11:44:27.326 [2570:907] Rating: 2
    2013-06-06 11:44:27.327 [2570:907] Rating: 3 


[rateQuery findObjectsInBackgroundWithBlock:^(NSArray *rateObjects, NSError *error)
 {
     if( !error )
     {
         NSLog(@"rateobject %@", rateObjects);

         for (id item in rateObjects) {

             int ratingVal = [[item objectForKey:@"Rating"] intValue];
             NSLog(@"Rating: %d", ratingVal);
         }

     }
 }
 ];

我希望将数字相加得到总数,然后除以计数得到平均“评分”。

我试过了,但显然语法不正确。我想我需要使用 NSArray 而不是“item”:

NSNumber *sum=[[item objectForKey:@"Rating"] valueForKeyPath:@"@sum.floatValue"];
                 NSLog(@"Rating Sum: %@", sum);

感谢您的帮助。

【问题讨论】:

标签: ios objective-c nsarray nsnumber


【解决方案1】:

您可以使用 KVC 获得平均值。一个例子

NSArray *objects = @[
@{ @"Rating": @4 },
@{ @"Rating": @6 },
@{ @"Rating": @10 }
];

NSLog(@"Average: %@", [objects valueForKeyPath:@"@avg.Rating"]);
// results in "Average: 6.666666"

所以在你的情况下使用:

NSNumber *sum = [rateObjects valueForKeyPath:@"@sum.Rating"];
NSNumber *average = [rateObjects valueForKeyPath:@"@avg.Rating"];

【讨论】:

    【解决方案2】:

    试试这个:

    __block float sum = 0;
    [rateQuery findObjectsInBackgroundWithBlock:^(NSArray *rateObjects, NSError *error)  {
        if( !error )      {
            NSLog(@"rateobject %@", rateObjects);
    
            for (id item in rateObjects) {
                sum = sum + [[item objectForKey:@"Rating"] intValue];
                int ratingVal = [[item objectForKey:@"Rating"] intValue];
                NSLog(@"Rating: %d", ratingVal);
            }
            NSLog(@"Sum: %f", sum);
            NSLog(@"Average: %f", sum/rateObjects.count);
        }
    }];
    

    【讨论】:

    • 谢谢!用这一行 sum = sum + [[item objectForKey:@"Rating"] intValue];我收到一条错误消息,指出“变量不可赋值(缺少 __block 特定类型说明符。我必须在 .h 文件中声明浮点总和吗?谢谢
    • 查看我编辑的答案...
    【解决方案3】:

    试试这个:

    NSNumber *sum = [rateObjects valueForKeyPath:@"@sum.Rating"];
    

    在你的 for 循环之外

    【讨论】:

      猜你喜欢
      • 2015-01-13
      • 1970-01-01
      • 2021-10-12
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      相关资源
      最近更新 更多