iOS sdk NSArray 在 NSArray 中查找并合并
iOS sdk NSArray within NSArray find and merge
我正在尝试搜索和合并多个 NSArray 中的对象。
基本上 NSArray 有多个 NSArray 和 1 个对象,然后是 NSDictionary。我想检查对象是否已经存在并将其与现有对象合并,这样 NSSArray 就会有一个 NSArray 和 1 个对象,然后是多个 NSDictionary。在 Objective-c.
(
(
"The Essential: Céline Dion",
{
"album": "The Essential: Céline Dion",
"artwork": "<UIImage: 0x608000087210>, {512, 506}",
"title": "It's All Coming Back to Me Now"
}
),
(
"Ah Via Musicom",
{
"album": "Ah Via Musicom",
"artwork": "<UIImage: 0x60000008a6e0>, {600, 600}",
"title": "Cliffs of Dover"
}
),
(
"Tears Roll Down (Greatest Hits 82-92)",
{
"album": "Tears Roll Down (Greatest Hits 82-92)",
"artwork": "<UIImage: 0x6080000887a0>, {512, 512}",
"title": "Everybody Wants to Rule the World"
}
),
(
"No Money - Single",
{
"album": "No Money - Single",
"artwork": "<UIImage: 0x6080000845b0>, {600, 600}",
"title": "No Money"
}
),
(
"Tears Roll Down (Greatest Hits 82-92)",
{
"album": "Tears Roll Down (Greatest Hits 82-92)",
"artwork": "<UIImage: 0x60800008d5c0>, {512, 512}",
"title": "Shout"
}
),
(
"STAB!",
{
"album": "STAB!",
"artwork": "<UIImage: 0x60800008da20>, {512, 512}",
"title": "Will You Remember Me?"
}
),
(
"Life After Sundown",
{
"album": "Life After Sundown",
"artwork": "<UIImage: 0x60000008d840>, {600, 600}",
"title": "Werewolves On Wheels"
}
)
)
至此
(
(
"The Essential: Céline Dion",
{
"album": "The Essential: Céline Dion",
"artwork": "<UIImage: 0x608000087210>, {512, 506}",
"title": "It's All Coming Back to Me Now"
}
),
(
"Ah Via Musicom",
{
"album": "Ah Via Musicom",
"artwork": "<UIImage: 0x60000008a6e0>, {600, 600}",
"title": "Cliffs of Dover"
}
),
(
"Tears Roll Down (Greatest Hits 82-92)",
{
"album": "Tears Roll Down (Greatest Hits 82-92)",
"artwork": "<UIImage: 0x6080000887a0>, {512, 512}",
"title": "Everybody Wants to Rule the World"
},
{
"album": "Tears Roll Down (Greatest Hits 82-92)",
"artwork": "<UIImage: 0x60800008d5c0>, {512, 512}",
"title": "Shout"
}
),
(
"No Money - Single",
{
"album": "No Money - Single",
"artwork": "<UIImage: 0x6080000845b0>, {600, 600}",
"title": "No Money"
}
),
(
"STAB!",
{
"album": "STAB!",
"artwork": "<UIImage: 0x60800008da20>, {512, 512}",
"title": "Will You Remember Me?"
}
),
(
"Life After Sundown",
{
"album": "Life After Sundown",
"artwork": "<UIImage: 0x60000008d840>, {600, 600}",
"title": "Werewolves On Wheels"
}
)
)
让我们将您的原始数组称为 mainArray
。
首先,您从 mainArray
中收集唯一名称。
NSMutableArray *uniqueNames = [NSMutableArray array];
for (NSArray *sub in mainArray) {
NSString *name = [sub firstObject];
BOOL isDuplicate = [[uniqueNames filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains %@",name]] count] > 0;
if (!isDuplicate) {
[uniqueNames addObject:name];
}
}
之后,遍历 uniqueNames
数组并在 mainArray
和 re-structure 数组中搜索重复项。
NSMutableArray *final = [NSMutableArray array];
for (NSString *name in uniqueNames) {
NSPredicate *namePredicate = [NSPredicate predicateWithFormat:@"SELF contains %@",name];
NSArray *duplicateArrays = [mainArray filteredArrayUsingPredicate:namePredicate];
if ([duplicateArrays count] > 1) {
NSMutableArray *newArray = [NSMutableArray arrayWithObject:name];
for (NSArray *duplicateArray in duplicateArrays) {
[newArray addObject:[duplicateArray lastObject]];
}
[final addObject:newArray];
}
else{
[final addObject:duplicateArrays];
}
}
此处 final
数组是您的结果。
我正在尝试搜索和合并多个 NSArray 中的对象。
基本上 NSArray 有多个 NSArray 和 1 个对象,然后是 NSDictionary。我想检查对象是否已经存在并将其与现有对象合并,这样 NSSArray 就会有一个 NSArray 和 1 个对象,然后是多个 NSDictionary。在 Objective-c.
(
(
"The Essential: Céline Dion",
{
"album": "The Essential: Céline Dion",
"artwork": "<UIImage: 0x608000087210>, {512, 506}",
"title": "It's All Coming Back to Me Now"
}
),
(
"Ah Via Musicom",
{
"album": "Ah Via Musicom",
"artwork": "<UIImage: 0x60000008a6e0>, {600, 600}",
"title": "Cliffs of Dover"
}
),
(
"Tears Roll Down (Greatest Hits 82-92)",
{
"album": "Tears Roll Down (Greatest Hits 82-92)",
"artwork": "<UIImage: 0x6080000887a0>, {512, 512}",
"title": "Everybody Wants to Rule the World"
}
),
(
"No Money - Single",
{
"album": "No Money - Single",
"artwork": "<UIImage: 0x6080000845b0>, {600, 600}",
"title": "No Money"
}
),
(
"Tears Roll Down (Greatest Hits 82-92)",
{
"album": "Tears Roll Down (Greatest Hits 82-92)",
"artwork": "<UIImage: 0x60800008d5c0>, {512, 512}",
"title": "Shout"
}
),
(
"STAB!",
{
"album": "STAB!",
"artwork": "<UIImage: 0x60800008da20>, {512, 512}",
"title": "Will You Remember Me?"
}
),
(
"Life After Sundown",
{
"album": "Life After Sundown",
"artwork": "<UIImage: 0x60000008d840>, {600, 600}",
"title": "Werewolves On Wheels"
}
)
)
至此
(
(
"The Essential: Céline Dion",
{
"album": "The Essential: Céline Dion",
"artwork": "<UIImage: 0x608000087210>, {512, 506}",
"title": "It's All Coming Back to Me Now"
}
),
(
"Ah Via Musicom",
{
"album": "Ah Via Musicom",
"artwork": "<UIImage: 0x60000008a6e0>, {600, 600}",
"title": "Cliffs of Dover"
}
),
(
"Tears Roll Down (Greatest Hits 82-92)",
{
"album": "Tears Roll Down (Greatest Hits 82-92)",
"artwork": "<UIImage: 0x6080000887a0>, {512, 512}",
"title": "Everybody Wants to Rule the World"
},
{
"album": "Tears Roll Down (Greatest Hits 82-92)",
"artwork": "<UIImage: 0x60800008d5c0>, {512, 512}",
"title": "Shout"
}
),
(
"No Money - Single",
{
"album": "No Money - Single",
"artwork": "<UIImage: 0x6080000845b0>, {600, 600}",
"title": "No Money"
}
),
(
"STAB!",
{
"album": "STAB!",
"artwork": "<UIImage: 0x60800008da20>, {512, 512}",
"title": "Will You Remember Me?"
}
),
(
"Life After Sundown",
{
"album": "Life After Sundown",
"artwork": "<UIImage: 0x60000008d840>, {600, 600}",
"title": "Werewolves On Wheels"
}
)
)
让我们将您的原始数组称为 mainArray
。
首先,您从 mainArray
中收集唯一名称。
NSMutableArray *uniqueNames = [NSMutableArray array];
for (NSArray *sub in mainArray) {
NSString *name = [sub firstObject];
BOOL isDuplicate = [[uniqueNames filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains %@",name]] count] > 0;
if (!isDuplicate) {
[uniqueNames addObject:name];
}
}
之后,遍历 uniqueNames
数组并在 mainArray
和 re-structure 数组中搜索重复项。
NSMutableArray *final = [NSMutableArray array];
for (NSString *name in uniqueNames) {
NSPredicate *namePredicate = [NSPredicate predicateWithFormat:@"SELF contains %@",name];
NSArray *duplicateArrays = [mainArray filteredArrayUsingPredicate:namePredicate];
if ([duplicateArrays count] > 1) {
NSMutableArray *newArray = [NSMutableArray arrayWithObject:name];
for (NSArray *duplicateArray in duplicateArrays) {
[newArray addObject:[duplicateArray lastObject]];
}
[final addObject:newArray];
}
else{
[final addObject:duplicateArrays];
}
}
此处 final
数组是您的结果。