gpt4 book ai didi

objective-c - 如何在 objective-c 中实现 Perl 哈希?

转载 作者:搜寻专家 更新时间:2023-10-30 20:04:08 24 4
gpt4 key购买 nike

我浏览了许多网站和教程以及 Apple 文档,但仍然没有找到解决方案:在我看来,NSArray、NSDictionary 和它们的可变对应物根本不像 Perl 的简单功能哈希。我当然希望我是错的。

我需要的是:动态键 和值的可变结构(1 个键 - 1 个值,就这么简单)!我的意思是,我事先不知道 key ,我需要轻松检查 key 是否存在,如果存在则检索值或更新它,如果不存在则输入具有新值的新 key 。我需要的值是 float ,而不是对象或数组。完成填充结构后,我需要能够检索键并最终通过检索到的键循环遍历值。

所有这些都可以在 Perl 中使用以下命令轻松完成:

    my %expenses;

if (exists $expenses{$key}) {
$expenses{$key} += $amount;
} else {
$expenses{$key} = $amount;
}

[...]

有没有人可以告诉我如何在不使用原始类型的情况下在 objective-c 中实现类似的东西?

非常感谢您的帮助。法布里齐奥

最佳答案

Cocoa 和 Core Foundation 集合类通常面向存储对象而不是原始值;像您这样的问题的通常解决方案是将 float 包装在 NSNumber 对象中。不幸的是,获取和设置对象的语法比 Perl 的语法更冗长

除此之外,NSMutableDictionary 应该完全按照您的意愿行事。键可以是任何字符串,或任何其他可以复制的对象(即它符合 NSCopying 协议(protocol)),您可以获得所有键的列表,并且您可以通过简单地尝试检查字典中是否“存在”键获取相应的值。与您的示例相对应的代码可能如下所示:

// NB: there no autovivification in Objective-C. Be sure to initialize this somewhere
// before using it!
NSMutableDictionary *expenses;

if ([expenses objectForKey:key]) {
// This *could* be done in one statement. But it would be very long, so I split
// it in two for clarity.
float currentValue = [[expenses objectForKey:key] floatValue];
[expenses setObject:[NSNumber numberWithFloat:currentValue + amount] forKey:key];
} else {
[expenses setObject:[NSNumber numberWithFloat:amount] forKey:key];
}

关于objective-c - 如何在 objective-c 中实现 Perl 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5785275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com