我有NSMutableArray
如下: -
在我的UICollectionView
numberOfItemsInSection
中,如何获取attribute_name的项目数?例如,在attribute_group_name Color
部分下,我将获得4个项目。
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return self.attributeGroupList[section].count; //HOW CAN I GET ITEM COUNT FOR ATTRIBUTE_NAME?
}
更新: -
具有新数据结构的示例输出: -
{
"attribute_group_name" = Color;
names = (
Black,
White,
Gold,
Red
);
},
{
"attribute_group_name" = Service;
names = (
"Free Shipping",
Insurance
);
},
{
"attribute_group_name" = Telco;
names = (
Digi,
Maxis,
Celcom
);
},
{
"attribute_group_name" = Material;
names = (
Wood
);
},
{
"attribute_group_name" = Brand;
names = (
Apple,
Mi,
Gome,
HuaWei
);
},
{
"attribute_group_name" = RAM;
names = (
4G,
8G,
16G
);
},
{
"attribute_group_name" = Size;
names = (
1200sqf,
908sqf
);
},
{
"attribute_group_name" = Location;
names = (
"Petaling Jaya",
"Kuala Lumpur",
Ipoh
);
},
{
"attribute_group_name" = Memory;
names = (
32G,
64G,
128G,
256G
);
},
{
"attribute_group_name" = Warranty;
names = (
"1 Year"
);
}
答案 0 :(得分:1)
如果我查看您的数据结构,我会说:
self.attributeGroupList[section].count-1
" -1"在这里是因为您的数据结构看起来只有一个不同的密钥。 但我认为这不是你要等待的答案。
这里真正的问题是你的数据结构,我肯定会这样做:
{
"group_name": Color;
"names":["Black","White","Red"];
}
这样你就可以这样做:
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return self.attributeGroupList[section][@"names"].count;
}
编辑:
好的,所以你做得很好,改变的唯一小事就是那个部分:
for (int i = 0; i < groupNames.count; i++)
{
NSString *name = [[groupNames objectAtIndex:i] objectForKey:@"attribute_name"];
[entry setObject:name forKey:[NSString stringWithFormat:@"attribute_name%d", i + 1]];
}
只需要这样做,我确信有一种更聪明的方法,但这里很简单:
NSMutableArray *resultArray = [NSMutableArray new];
NSArray *groups = [_filterItem valueForKeyPath:@"@distinctUnionOfObjects.attribute_group_name"];
for (NSString *attribute_group_name_header in groups){
NSMutableDictionary *entry = [NSMutableDictionary new];
[entry setObject:attribute_group_name_header forKey:@"attribute_group_name"];
NSArray *groupNames = [_filterItem filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"attribute_group_name = %@", attribute_group_name_header]];
NSMutableArray *names = [NSMutableArray new];
for (int i = 0; i < groupNames.count; i++){
NSString *name = [[groupNames objectAtIndex:i] objectForKey:@"attribute_name"];
[names addObject: name];
}
[entry setObject: names forKey:@"names"];
[resultArray addObject:entry];
}
编辑2:
看完你的最终物品后,似乎我忘了添加&#34; @&#34;之前&#34;名称&#34;串。因此,请确保在任何字符串之前(第一个EDIT已相应更正)。
另外,也许在添加到数组(NSString *)
之前添加类似于names
的字符串,如下所示:
NSString *name = (NSString *)[[groupNames objectAtIndex:i] objectForKey:@"attribute_name"];
这将为您提供一个字符串数组,而不是随机对象数组(就像您目前所拥有的那样),这可能很难使用。
编辑3:
我们可以做到啊。 看起来它没有抓住钥匙&#34;名称&#34; 所以你需要更加具体。这样的事情:
return ((NSArray *)[self.attributeGroupList[0] objectForKey:@"names"]).count
请记住,这段代码非常糟糕。我将一个对象强制转换为一个数组。这是一个假设,您应该在执行此操作之前对对象执行一些测试。因为如果数据结构发生变化,这将会崩溃。
注:
你在一个问题上提出了很多问题。 Stackoverflow就是要解决一个精确且定义良好的问题,以便您的问题可以对其他人有所帮助。一般来说,您在代码中肯定需要帮助。所以这绝对不是发布这个的地方。我建议你去看看像Codementor这样的网站