我有一个NSMuttableArray,其值为
(
{
MedicineAlarmTime = "18:00:00";
MedicineDateTime = "24/04/2014 16:00:09";
},
{
MedicineAlarmTime = "18:00:00";
MedicineDateTime = "24/04/2014 16:00:26";
},
{
MedicineAlarmTime = "19:00:00";
MedicineDateTime = "24/04/2014 16:00:26";
},
{
MedicineAlarmTime = "19:00:00";
MedicineDateTime = "24/04/2014 16:00:26";
}
)
是否可以检索类似“MedicineAlarmTime”的数组,如
array1 = (
{
MedicineAlarmTime = "18:00:00";
MedicineDateTime = "24/04/2014 16:00:09";
},
{
MedicineAlarmTime = "18:00:00";
MedicineDateTime = "24/04/2014 16:00:26";
}
)
array2 = (
{
MedicineAlarmTime = "19:00:00"
MedicineDateTime = "24/04/2014 16:00:09";
},
{
MedicineAlarmTime = "19:00:00";
MedicineDateTime = "24/04/2014 16:00:26";
}
)
答案 0 :(得分:3)
NSMutableDictionary *groupedAlarms = [NSMutableDictionary dictionary];
for (NSDictionary *alarm in originalArray) {
NSString *alarmTime = [alarm objectForKey: MedicineAlarmTime];
NSMutableArray *alarmGroup = [groupedAlarms objectForKey: MedicineAlarmTime]
if (alarmGroup) {
[alarmGroup addObject: alarm];
} else {
alarmGroup = [NSMutableArray arrayWithObjects: alarm, nil];
[groupedAlarms setValue:alarmGroup forKey:alarmTime];
}
}
这会创建一个NSMutableDictionary,groupedAlarms
。 groupedAlarms
中的键是原始数组中字典的闹钟时间 - 实际的闹钟时间值。每个键的值都是数组。数组包含原始数组的字典 - 根据警报时间(用作包含它们的数组的键)进行排序。
如果您希望上面示例中的“alarmGroup”更加通用而不是仅与组完全匹配,则可以使用相同的forin
循环结构。用于确定是将其放入现有组还是创建新组的检查变得稍微复杂一些,但重要的是,我们仍然不需要预先排序数组,然后再次遍历它。
我可以看到预排序的唯一原因是,如果您有一组所需的组,并且每组中有一定数量的对象。然后,您无法真正知道将每个对象放入哪个组,直到对数组进行排序。
但是在这里,我们试图将对象放在具有相似对象的组中,因此算法很简单:
抓住一个物体。查看它是否属于现有组。如果没有,请为此对象创建一个新组。移动到下一个对象。
对于任何downvoters ......除非原始问题更清楚,否则我无法提供比本答案中现有示例代码更复杂的示例的示例代码。
答案 1 :(得分:0)
不确定。你只需要为它编写代码。
首先,您使用NSArray方法sortedArrayUsingDescriptor:来获取一个按MedicineAlarmTime排序的数组,因此您可能想要的数组元素实际上将在一起。然后迭代遍历数组,比较MedicineAlarmTime以检查两个数组元素是否相似"类似"足够你,并使用NSArray方法subArrayWithRange创建包含这些组的数组: