• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios NSPredicate 在 NSDictionary 中查找最接近的值

[复制链接]
菜鸟教程小白 发表于 2022-12-12 11:12:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个 字典数组,如下所示:

(
{ key = 1, value = 40},
{ key = 4, value = 50},
{ key = 8, value = 60}
}

这些是这样的, for >=1 项目成本是 40, for >=4 项目成本是 50 和类似的。

我想获得 5 的值,在本例中为 50。

我试过的一段代码是:

NSMutableArray *wallpaperPriceArray = [[NSMutableArray alloc]init]; // Assuming this has all the dictionary values 

float wallpaperPriceValue = 0;

int itemNumber = 0;

for (int i = 0; i<wallpaperPriceArray.count; i++) {

int check = 0;

if(itemNumber >= [[wallpaperPriceArray objectAtIndex:i] intValue])
{
    wallpaperPriceValue = [[[wallpaperPriceArray objectAtIndex:i] objectForKey"value"] floatValue];
    check++;
}

if(i + 1 <= wallpaperPriceArray.count)
{
    if(itemNumber >= [[wallpaperPriceArray objectAtIndex:i+1] intValue] && itemNumber < [[wallpaperPriceArray objectAtIndex:i+1] intValue])
    {
        wallpaperPriceValue = [[[wallpaperPriceArray objectAtIndex:i+1] objectForKey"value"] floatValue];
        check++;

        if(check == 2)
        {
            break ;
        }
    }
}

if(i + 2 <= wallpaperPriceArray.count)
{
    if(itemNumber >= [[wallpaperPriceArray objectAtIndex:i+2] intValue] && itemNumber < [[wallpaperPriceArray objectAtIndex:i+2] intValue])
    {
        wallpaperPriceValue = [[[wallpaperPriceArray objectAtIndex:i+2] objectForKey"value"] floatValue];
        check++;

        if(check == 2)
        {
            break ;
        }
    }
}



Best Answer-推荐答案


我不认为谓词是正确的,最好是枚举对象这里是一些示例代码:

NSArray *array = @[
                   @{ @"key" : @(1), @"value" : @(40)},
                   @{ @"key" : @(4), @"value" : @(50)},
                   @{ @"key" : @(8), @"value" : @(60)}
];

NSInteger searchedValue = 5; // <---

__block NSDictionary *closestDict = nil;
__block NSInteger closestValue = 0;


[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    NSDictionary *dict = obj;
    NSInteger key = [dict[@"key"] integerValue];

    // Check if we got better result
    if(closestDict == nil || (key > closestValue && key <= searchedValue)){
        closestDict = dict;
        closestValue = key;

        if(key == searchedValue) { *stop = YES; }
    }
}];

NSLog(@"value %@", closestDict);

关于ios NSPredicate 在 NSDictionary 中查找最接近的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25197307/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap