Ich habe zwei Tabellen, eine Tabelle für Benutzernamen und eine Tabelle für Punkte. Ich befülle diese Tabellen mit zwei Arrays. Die Tabellen müssen basierend auf den Scores in absteigender Reihenfolge angeordnet sein. Ich sortiere das Array mit den Noten darin, aber ich bin mir nicht sicher, wie ich die Benutzernamen so einrichten kann, dass sie bei ihrer Punktzahl bleiben, sie sind in einem separaten Array und einer separaten Tabelle aus der Scores-Tabelle. Hier ist mein Code:Reihenfolge von einem Array basierend auf der Reihenfolge eines anderen Arrays anpassen, das sortiert wurde
dictionary = [NSDictionary dictionaryWithObjects:matchesForUser forKeys:tableData];
sortedFirstArray = [dictionary allKeys];
sortedSecondArray = [dictionary objectsForKeys:sortedFirstArray notFoundMarker:[NSNull null]];
sortedSecondArray = [sortedSecondArray sortedArrayUsingSelector: @selector(compare:)];
Ich brauche die sortedFirstArray
Werte mit ihren jeweiligen sortedSecondArray
Werte in ihrer Reihenfolge in jeder ihrer Reihen zu halten.
UPDATE
Mein Code versucht, die Sortierung zu tun:
PFQuery *query = [PFQuery queryWithClassName:@"_User"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (!error) {
entries = [NSMutableArray new];
for (PFObject *object in objects) {
NSLog(@"%@", object.objectId);
[tableData addObject:[object valueForKey:@"username"]];
[matchesForUser addObject:[object valueForKey:@"matches"]];
NSMutableDictionary* entry = [NSMutableDictionary new];
entry[@"username"] = [object valueForKey:@"username"];
entry[@"matches"] = [object valueForKey:@"matches"];
[entries addObject:entry];
//transfer = entries;
}
transfer = [entries sortedArrayUsingComparator:^NSComparisonResult(NSDictionary* a, NSDictionary* b) {
NSDate *first = [a objectForKey:@"matches"];
NSDate *second = [b objectForKey:@"matches"];
NSLog(first);
NSLog(second);
return [first compare:second];
}];
//dictionary = [NSDictionary dictionaryWithObjects:matchesForUser forKeys:tableData];
//sortedFirstArray = [dictionary allKeys];
//sortedSecondArray = [dictionary objectsForKeys:sortedFirstArray notFoundMarker:[NSNull null]];
//sortedSecondArray = [sortedSecondArray sortedArrayUsingSelector: @selector(compare:)];
[_tableView reloadData];
[_tableViewScore reloadData];
}else{
NSLog([error description]);
}
NSLog(@"***tabledata***");
NSLog([NSString stringWithFormat:@"%lu", (unsigned long)[tableData count]]);
NSLog(@"***matchesdata***");
NSLog([NSString stringWithFormat:@"%lu", (unsigned long)[matchesForUser count]]);
});
}];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if(tableView.tag == 1) {
static NSString *simpleTableIdentifier = @"SimpleTableItem";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0];
cell.textLabel.textColor = [UIColor colorWithRed:218.0f/255.0f green:247.0f/255.0f blue:220.0f/255.0f alpha:1.0f];
cell.backgroundColor = [UIColor colorWithRed:153.0f/255.0f green:211.0f/255.0f blue:212.0f/255.0f alpha:1.0f];
cell.layoutMargins = UIEdgeInsetsZero;
cell.preservesSuperviewLayoutMargins = NO;
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
UILabel *contentV = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 230, 44)];
contentV.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0];
contentV.textColor = [UIColor colorWithRed:218.0f/255.0f green:247.0f/255.0f blue:220.0f/255.0f alpha:1.0f];
contentV.backgroundColor = [UIColor colorWithRed:153.0f/255.0f green:211.0f/255.0f blue:212.0f/255.0f alpha:1.0f];
cell.contentView.layoutMargins = UIEdgeInsetsZero;
NSString *username2 = [[transfer objectAtIndex:indexPath.row] valueForKey:@"username"];
NSLog(@"***username***");
NSLog(username2);
contentV.text = username2;
[cell.contentView addSubview:contentV];
return cell;
}
else {
static NSString *simpleTableIdentifier = @"SimpleTableItem";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0];
cell.textLabel.textColor = [UIColor colorWithRed:153.0f/255.0f green:211.0f/255.0f blue:212.0f/255.0f alpha:1.0f];
cell.backgroundColor = [UIColor colorWithRed:218.0f/255.0f green:247.0f/255.0f blue:220.0f/255.0f alpha:1.0f];
cell.textLabel.textAlignment = NSTextAlignmentCenter;
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
NSString *matchAmount = [[transfer objectAtIndex:indexPath.row] valueForKey:@"matches"];
NSLog(@"***matchamount***");
NSLog(matchAmount);
cell.textLabel.text = matchAmount;
return cell;
}
}
Ich denke, Sie sind besser dran mit einem _single_ Array von Wörterbüchern, jedes mit einem 'username' und einem' score' (oder vielleicht eine benutzerdefinierte Klasse). Sie können sie mit einem benutzerdefinierten Block sortieren, der den "score" -Eintrag jedes Wörterbuchs vergleicht, und Sie können dasselbe Array als Datenquelle für beide Tabellen verwenden (indem Sie für jede Tabelle einen anderen Eintrag auswählen). –
cool klingt gut, können Sie ein Codebeispiel bereitstellen? Ich denke, ich habe eine ungefähre Idee, also keine Sorgen, wenn nicht – ewizard
Es ist ziemlich einfach, wenn Sie 'NSDictionary's' -objectForKey: 'und' -setObject: forKey: 'und' NSArray''s '-sortedArrayUsingComparator verwenden können : '. –