1

我有一种NSSet方法检查重复项和每个名称的重复项计数。我想将名称与重复的数量一起放在表格视图中。在找到重复项后,我取了 100 个名称并返回 27 个单元格,但我似乎无法获得要放置在具有相应名称的表视图中的重复项的数量。这是我一直在尝试使用的屏幕截图和方法以使其正常工作。

在此处输入图像描述

- (NSSet *)checkForDuplicateIDs {

//CHECK FOR DUPLICATES IN ARRAY
NSArray *allIDs = [tweetArray valueForKeyPath:@"sender_screen_name"];
NSArray *sortedIDs = [allIDs sortedArrayUsingSelector:@selector(compare:)];

NSString *previousID = nil;
duplicateIDs = [NSMutableSet set];
for (NSString *anID in sortedIDs) {
    if ([previousID isEqualToString:anID]) {
        [duplicateIDs addObject:anID];

    }
    previousID = anID;
}


//THEN REMOVE ANY DUPLICATES IN NEW ARRAY
NSCountedSet *countedSet = [NSCountedSet setWithArray:sortedIDs];
NSMutableArray *oneMess = [NSMutableArray arrayWithCapacity:[sortedIDs count]];
NSMutableArray *multipleMess = [NSMutableArray arrayWithCapacity:[sortedIDs count]];


for(id obj in countedSet) {
    if([countedSet countForObject:obj] == 1) {
        [oneMess addObject:obj];
    }
    for(id duplicatenames in countedSet) {
        if ([countedSet countForObject:duplicatenames]>1) {
            [multipleMess addObject:duplicatenames];
            [countedSet  countForObject:duplicatenames];

        }


    }


}


//other method.... much easier and cleaner but how do I put them into an array?
NSCountedSet *set = [[NSCountedSet alloc] initWithArray:allIDs];

for (id item in set)
{
  //  NSLog(@"Name=%@, Count=%lu", item, (unsigned long)[set countForObject:item]);
}    





//  NSLog(@"NSCountedSet ALL Objects = %@",[countedSet allObjects]);
//  NSLog(@"NSCountedSet = %@",countedSet);

[tweetArray removeAllObjects];
[tweetArray addObjectsFromArray:[countedSet allObjects]];
tweetArrayCount = [[NSMutableArray alloc] initWithObjects:countedSet, nil];


//NSLog(@"One Message = %@",oneMess);
// NSLog(@"Multiple Messages = %@",multipleMess);


//HERE I HAVE ORIGINAL ARRAY IN ALBETICAL ORDER
// NSLog(@"Messages Containing more then 1 = %@",sortedIDs);    

//HERE I HAVE DUPLICATES IN ALBETICAL ORDER
// NSLog(@"Messages Containing more then 1 = %@",duplicateIDs);

//HERE I HAVE THE MESSAGES ONLY CONTAING 1
//NSLog(@"Messages Containing only 1 = %@",oneMess);


//NSLog(@"Duplicates count = %i",[duplicateIDs count]);
// NSLog(@"Messages Containing only count = %i",[oneMess count]);



[mainTableView reloadData];


return [[duplicateIDs copy] autorelease];

}
4

1 回答 1

2

我修改了一个简单的 UITableView 示例,它列出了国家名称来做我认为你想做的事情。计数放在 detailTextLabel.text 中。

countedList = [[NSCountedSet alloc] initWithArray:listOfItems];//listOfItems is an array of country name strings with duplicates
    listOfItems2 = [NSMutableArray array]; // array without duplicates that's the data source for the UITableView

    for (NSString *aCountry in countedList) {
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        [dict setValue:aCountry forKey:@"name"];
        [dict setValue:[NSString stringWithFormat:@"%lu",[countedList countForObject:aCountry]] forKey:@"count"];
        [listOfItems2 addObject:dict];
    }

然后我使用以下方法为表提供数据:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; //
    }

    // Set up the cell...
    cell.textLabel.text = [[listOfItems2 objectAtIndex:indexPath.row]valueForKey:@"name"];
    cell.detailTextLabel.text = [[listOfItems2 objectAtIndex:indexPath.row]valueForKey:@"count"];
    return cell;
}
于 2012-04-25T04:52:37.057 回答