Objective c 使用NSSet对象设置NSDICTORIAL

Objective c 使用NSSet对象设置NSDICTORIAL,objective-c,nsdictionary,nsset,Objective C,Nsdictionary,Nsset,是否有一种方法可以在一个命令中使用NSSet对象设置NSSDictionary?或者,是否需要先为所有集合创建对象 例如,这样的事情可能吗 NSDictionary *dictionary=[NSDictionary dictionaryWithObjectsAndKeys:{@"orange",@"lemon"},@"citrus",{@"horse",@"moose",@"goose"},@"animals",nil]; 感谢阅读。没有NSSet文字,没有。但是您可以使用NSArray文字

是否有一种方法可以在一个命令中使用NSSet对象设置NSSDictionary?或者,是否需要先为所有集合创建对象

例如,这样的事情可能吗

NSDictionary *dictionary=[NSDictionary dictionaryWithObjectsAndKeys:{@"orange",@"lemon"},@"citrus",{@"horse",@"moose",@"goose"},@"animals",nil];

感谢阅读。

没有NSSet文字,没有。但是您可以使用NSArray文字来初始化NSSet…这是您可以获得的最短的:

NSDictionary *dictionary = @{
    @"citrus":  [NSSet setWithArray:@[@"orange", @"lemon"]],
    @"animals": [NSSet setWithArray:@[@"horse", @"moose", @"goose"]]};

没有NSSet文字,没有。但是您可以使用NSArray文字来初始化NSSet…这是您可以获得的最短文字:

NSDictionary *dictionary = @{
    @"citrus":  [NSSet setWithArray:@[@"orange", @"lemon"]],
    @"animals": [NSSet setWithArray:@[@"horse", @"moose", @"goose"]]};

仅在Objective-C中没有
NSSet
文字
NSArray
文字

NSDictionary*dictionary=@{“柑橘”:[@“橙”、“柠檬”、“动物”:[@“马”、“驼鹿”、“鹅”]

因此,以上内容将为您提供一本
NSDictionary
,其中
NSArray
包含
orange
lemon
的钥匙
citrus
NSArray
包含
驼鹿
,以及
的钥匙
动物

你可以像这样访问那些
nsarray
字典[@“动物”和字典[@“柑橘”]

您还可以嵌套这些文本访问器,以便
字典[@“动物”][0]
会给你

甚至使用数组方法


[字典[@“柑橘”]计数]
将为您提供
2

仅在Objective-C中没有
NSSet
文字
NSArray
文字

NSDictionary*dictionary=@{“柑橘”:[@“橙”、“柠檬”、“动物”:[@“马”、“驼鹿”、“鹅”]

因此,以上内容将为您提供一本
NSDictionary
,其中
NSArray
包含
orange
lemon
的钥匙
citrus
NSArray
包含
驼鹿
,以及
的钥匙
动物

你可以像这样访问那些
nsarray
字典[@“动物”和字典[@“柑橘”]

您还可以嵌套这些文本访问器,以便
字典[@“动物”][0]
会给你

甚至使用数组方法


[dictionary[@“citrus”]count]
将为您提供
2

不确定该通用方案是否合法,但如果是这样,则在ObjectsAndKeys列表中是向后的--首先是对象,其次是键。不确定该通用方案是否合法,但如果是向后的--首先是对象,其次是键,在ObjectsAndKeys列表中。可能比这更好的方法是只使用
[NSSet setWithObjects:@“orange”,“lemon”,nil]
。这样你就不会白白地创建和销毁一个数组。不过,也有一些折衷的办法,比如必须担心正确的零终止。除非性能是个问题,否则我会选择更难搞砸的方法。如果您没有正确地终止参数列表,编译器会立即通知您。每次运行程序时,使用+[NSSet setWithArray:]都会对运行时产生影响+[NSSet setWithObjects:]是一种更为常见的模式。如果某个参数意外为零(例如,它是方法或函数调用的结果),编译器无法警告您,从而过早终止列表。这是一种非常阴险的虫子,虽然幸运的是相当罕见。啊,我明白了,这是真的。不过,在这种情况下,由于所有元素都是文本,我认为使用setWithObjects是安全的。可能比使用
[NSSet setWithObjects:@“orange”,“lemon”,nil]更好。
。这样你就不会白白地创建和销毁一个数组。不过,也有一些折衷的办法,比如必须担心正确的零终止。除非性能是个问题,否则我会选择更难搞砸的方法。如果您没有正确地终止参数列表,编译器会立即通知您。每次运行程序时,使用+[NSSet setWithArray:]都会对运行时产生影响+[NSSet setWithObjects:]是一种更为常见的模式。如果某个参数意外为零(例如,它是方法或函数调用的结果),编译器无法警告您,从而过早终止列表。这是一种非常阴险的虫子,虽然幸运的是相当罕见。啊,我明白了,这是真的。不过,在这种情况下,由于所有元素都是文本,我认为使用setWithObjects是安全的。感谢您解释所有这些快捷方式,非常感谢!感谢您解释所有这些捷径,非常感谢!