gpt4 book ai didi

ios - 数组不删除重复项

转载 作者:行者123 更新时间:2023-12-01 19:14:25 26 4
gpt4 key购买 nike

我正在尝试将数组从核心数据加载到 TableView 中。有些值是重复的。因此,在我用来获取数据的数组中,我试图告诉数组删除任何重复项,然后将其显示在表格 View 中。但由于某种原因,它没有删除重复项。这是代码:

更新

- (void)viewDidLoad
{
fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *weightEntity = [NSEntityDescription entityForName:@"Tracking" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:weightEntity];
result = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];

NSMutableArray *cleaningArray= [NSMutableArray new];
NSSet *duplicatesRemover = [NSSet setWithArray:result];
[duplicatesRemover enumerateObjectsUsingBlock: ^(id obj, BOOL* stop)
{
if(![cleaningArray containsObject: obj])
{
[cleaningArray addObject: obj];
}
}];

cleanArray = [cleaningArray copy];

[super viewDidLoad];

// Do any additional setup after loading the view.
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

mainCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (mainCell == nil) {
mainCell = [[dictionaryTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

Entity *person = [cleanArray objectAtIndex:indexPath.row];
mainCell.nameLabel.text = person.date;

return mainCell;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"%@", [cleanArray objectAtIndex:0]);
return cleanArray.count;
}

谢谢!

最佳答案

-containsObject 比较字符串(如 [string1 isEqual:string2])所以你可以这样做

NSArray* result = @[@"test",@"string",@"test",@"line"];
NSMutableArray* cleanArray = [[NSMutableArray alloc] init];


for (id object in result) {
if (![cleanArray containsObject:object])
[cleanArray addObject:object];
}

NSLog (@"cleanArray %@",cleanArray);

日志:
cleanArray (
test,
string,
line
)

更新
@dreamlax 和我一直在和 @Zack 聊天。似乎 NSSet/isEqual 问题是一个红鲱鱼。 “结果”数组不包含 NSString,它包含对 Core Data 的获取请求,每个请求当然都是唯一的,即使返回的数据不是。该数组与 TableView 紧密耦合, TableView 根据请求执行这些获取请求。

所以 Zack 需要做的就是将 Core Data 从他的 Table View 中分离出来,预先获取他想要比较的唯一性字符串,并将这个唯一的数组提供给 Table View。 NSSet 可以很好地获得一组独特的结果。
fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *weightEntity =
[NSEntityDescription entityForName:@"Entity"
inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:weightEntity];
result = [self.managedObjectContext executeFetchRequest:fetchRequest
error:nil];
NSMutableSet *dateSet = [NSMutableSet alloc] init];

for (id object in result) {
Entity *person = object;
NSString* dateString = person.date;
[dateSet addObject:dateString];
}

self.dateArray = [dateSet allObjects];

然后在他的tableView中:

mainCell.nameLabel.text = [cleanArray objectAtIndex:indexPath.row];

关于ios - 数组不删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14249475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com