本文介绍了从同一个float创建的两个NSNum根据==不相等的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一些 $ float s,然后将它们转换为 NSNumber s,但如果我尝试比较他们 if(numinarray = newnum){它从来没有去任何地方。当我 NSLog()输出值时,值匹配:
float distance = [barnardCastle distanceFromLocation:loc1] / 1000;
float distance2 = [billingham distanceFromLocation:loc1] / 1000;
float distance3 = [bishopAukland distanceFromLocation:loc1] / 1000;
float distance4 = [cockerton distanceFromLocation:loc1] / 1000;
float distance5 = [darlington distanceFromLocation:loc1] / 1000;
float distance6 = [guisborough distanceFromLocation:loc1] / 1000;
float distance7 = [hartlepool distanceFromLocation:loc1] / 1000;
float distance8 = [middlesbrough distanceFromLocation:loc1] / 1000;
float distance9 = [northallerton distanceFromLocation:loc1] / 1000;
float distance10 = [redcar distanceFromLocation:loc1] / 1000;
float distance11 = [stockton distanceFromLocation:loc1] / 1000;
float distance12 = [yarm distanceFromLocation:loc1] / 1000;
NSArray * nums,* sorted;
nums = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:distance],
[NSNumber numberWithFloat:distance2],
[NSNumber numberWithFloat:distance3],
[NSNumber numberWithFloat:distance4],
[NSNumber numberWithFloat:distance5],
[NSNumber numberWithFloat:distance6],
[NSNumber numberWithFloat:distance7] ],
[NSNumber numberWithFloat:distance9],
[NSNumber numberWithFloat:distance10],
[NSNumber numberWithFloat:distance11],
[NSNumber numberWithFloat:distance12]零];
sorted = [nums sortedArrayUsingSelector:@selector(comparison :)];
NSLog(@nums sorted);
NSLog(@distance is%f,distance);
NSNumber * intdist = [NSNumber numberWithFloat:distance];
NSNumber * intdist2 = [NSNumber numberWithFloat:distance2];
NSNumber * intdist3 = [NSNumber numberWithFloat:distance3];
NSNumber * intdist4 = [NSNumber numberWithFloat:distance4];
NSNumber * intdist5 = [NSNumber numberWithFloat:distance5];
NSNumber * intdist6 = [NSNumber numberWithFloat:distance6];
NSNumber * intdist7 = [NSNumber numberWithFloat:distance7];
NSNumber * intdist8 = [NSNumber numberWithFloat:distance8];
NSNumber * intdist9 = [NSNumber numberWithFloat:distance9];
NSNumber * intdist10 = [NSNumber numberWithFloat:distance10];
NSNumber * intdist11 = [NSNumber numberWithFloat:distance11];
NSNumber * intdist12 = [NSNumber numberWithFloat:distance12];
NSLog(@int dist%@,intdist);
NSLog(@int dist2%@,intdist2);
NSLog(@int dist3%@,intdist3);
NSLog(@int dist4%@,intdist4);
NSLog(@int dist5%@,intdist5);
NSLog(@int dist6%@,intdist6);
NSLog(@int dist7%@,intdist7);
NSLog(@int dist8%@,intdist8);
NSLog(@int dist9%@,intdist9);
NSLog(@int dist10%@,intdist10);
NSLog(@int dist11%@,intdist11);
NSLog(@int dist12%@,intdist12);
nearestLoc = [[NSMutableArray alloc] init];
NSLog(@about to loop);
for(int i = 0; i Branches * branches = [[Branches alloc] init];
NSLog(@looping);
NSNumber * index = [sorted objectAtIndex:i];
NSNumber * intdist = [NSNumber numberWithFloat:distance];
NSNumber * intdist2 = [NSNumber numberWithFloat:distance2];
NSNumber * intdist3 = [NSNumber numberWithFloat:distance3];
NSNumber * intdist4 = [NSNumber numberWithFloat:distance4];
NSNumber * intdist5 = [NSNumber numberWithFloat:distance5];
NSNumber * intdist6 = [NSNumber numberWithFloat:distance6];
NSNumber * intdist7 = [NSNumber numberWithFloat:distance7];
NSNumber * intdist8 = [NSNumber numberWithFloat:distance8];
NSNumber * intdist9 = [NSNumber numberWithFloat:distance9];
NSNumber * intdist10 = [NSNumber numberWithFloat:distance10];
NSNumber * intdist11 = [NSNumber numberWithFloat:distance11];
NSNumber * intdist12 = [NSNumber numberWithFloat:distance12];
NSLog(@int dist%@,intdist);
NSLog(@int dist2%@,intdist2);
NSLog(@int dist3%@,intdist3);
NSLog(@int dist4%@,intdist4);
NSLog(@int dist5%@,intdist5);
NSLog(@int dist6%@,intdist6);
NSLog(@int dist7%@,intdist7);
NSLog(@int dist8%@,intdist8);
NSLog(@int dist9%@,intdist9);
NSLog(@int dist10%@,intdist10);
NSLog(@int Dist11%@,intdist11);
NSLog(@int dist12%@,intdist12);
NSLog(@index%@,index);
if(index == intdist){
branches.branchLoc = @Barnard Castle;
branches.distance = distance;
[nearestLoc addObject:branches];
NSLog(@adding barnard castle);
}
if(index == intdist2){
branches.branchLoc = @Billingham;
branches.distance = distance2;
[nearestLoc addObject:branches];
NSLog(@adding billingham);
}
使用 NSNumber ?
解决方案
而不是使用 == ,调用或 。当您使用 == 时,您正在比较指针。
I have a few floats which I convert to NSNumbers and add to an array, then sort in numerical order.
I then take the original floats and convert those to NSNumbers, but if I try to compare them if(numinarray = newnum){ it never goes anywhere. When I NSLog() out the value, the values match:
float distance = [barnardCastle distanceFromLocation:loc1] / 1000; float distance2 = [billingham distanceFromLocation:loc1] / 1000; float distance3 = [bishopAukland distanceFromLocation:loc1] / 1000; float distance4 = [cockerton distanceFromLocation:loc1] / 1000; float distance5 = [darlington distanceFromLocation:loc1] / 1000; float distance6 = [guisborough distanceFromLocation:loc1] / 1000; float distance7 = [hartlepool distanceFromLocation:loc1] / 1000; float distance8 = [middlesbrough distanceFromLocation:loc1] / 1000; float distance9 = [northallerton distanceFromLocation:loc1] / 1000; float distance10 = [redcar distanceFromLocation:loc1] / 1000; float distance11 = [stockton distanceFromLocation:loc1] / 1000; float distance12 = [yarm distanceFromLocation:loc1] / 1000; NSArray *nums, *sorted; nums = [NSArray arrayWithObjects: [NSNumber numberWithFloat:distance], [NSNumber numberWithFloat:distance2], [NSNumber numberWithFloat:distance3], [NSNumber numberWithFloat:distance4], [NSNumber numberWithFloat:distance5], [NSNumber numberWithFloat:distance6], [NSNumber numberWithFloat:distance7], [NSNumber numberWithFloat:distance8], [NSNumber numberWithFloat:distance9], [NSNumber numberWithFloat:distance10], [NSNumber numberWithFloat:distance11], [NSNumber numberWithFloat:distance12], nil]; sorted = [nums sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"nums sorted"); NSLog(@"distance is %f",distance); NSNumber *intdist = [NSNumber numberWithFloat:distance]; NSNumber *intdist2 = [NSNumber numberWithFloat:distance2]; NSNumber *intdist3 = [NSNumber numberWithFloat:distance3]; NSNumber *intdist4 = [NSNumber numberWithFloat:distance4]; NSNumber *intdist5 = [NSNumber numberWithFloat:distance5]; NSNumber *intdist6 = [NSNumber numberWithFloat:distance6]; NSNumber *intdist7 = [NSNumber numberWithFloat:distance7]; NSNumber *intdist8 = [NSNumber numberWithFloat:distance8]; NSNumber *intdist9 = [NSNumber numberWithFloat:distance9]; NSNumber *intdist10 = [NSNumber numberWithFloat:distance10]; NSNumber *intdist11 = [NSNumber numberWithFloat:distance11]; NSNumber *intdist12 = [NSNumber numberWithFloat:distance12]; NSLog(@"int dist %@",intdist); NSLog(@"int dist2 %@",intdist2); NSLog(@"int dist3 %@",intdist3); NSLog(@"int dist4 %@",intdist4); NSLog(@"int dist5 %@",intdist5); NSLog(@"int dist6 %@",intdist6); NSLog(@"int dist7 %@",intdist7); NSLog(@"int dist8 %@",intdist8); NSLog(@"int dist9 %@",intdist9); NSLog(@"int dist10 %@",intdist10); NSLog(@"int dist11 %@",intdist11); NSLog(@"int dist12 %@",intdist12); nearestLoc = [[NSMutableArray alloc]init]; NSLog(@"about to loop"); for (int i=0; i < 12; i++) { Branches *branches = [[Branches alloc]init]; NSLog(@"looping"); NSNumber *index = [sorted objectAtIndex:i]; NSNumber *intdist = [NSNumber numberWithFloat:distance]; NSNumber *intdist2 = [NSNumber numberWithFloat:distance2]; NSNumber *intdist3 = [NSNumber numberWithFloat:distance3]; NSNumber *intdist4 = [NSNumber numberWithFloat:distance4]; NSNumber *intdist5 = [NSNumber numberWithFloat:distance5]; NSNumber *intdist6 = [NSNumber numberWithFloat:distance6]; NSNumber *intdist7 = [NSNumber numberWithFloat:distance7]; NSNumber *intdist8 = [NSNumber numberWithFloat:distance8]; NSNumber *intdist9 = [NSNumber numberWithFloat:distance9]; NSNumber *intdist10 = [NSNumber numberWithFloat:distance10]; NSNumber *intdist11 = [NSNumber numberWithFloat:distance11]; NSNumber *intdist12 = [NSNumber numberWithFloat:distance12]; NSLog(@"int dist %@",intdist); NSLog(@"int dist2 %@",intdist2); NSLog(@"int dist3 %@",intdist3); NSLog(@"int dist4 %@",intdist4); NSLog(@"int dist5 %@",intdist5); NSLog(@"int dist6 %@",intdist6); NSLog(@"int dist7 %@",intdist7); NSLog(@"int dist8 %@",intdist8); NSLog(@"int dist9 %@",intdist9); NSLog(@"int dist10 %@",intdist10); NSLog(@"int dist11 %@",intdist11); NSLog(@"int dist12 %@",intdist12); NSLog(@"index %@",index); if (index == intdist) { branches.branchLoc = @"Barnard Castle"; branches.distance = distance; [nearestLoc addObject:branches]; NSLog(@"adding barnard castle"); } if (index == intdist2) { branches.branchLoc = @"Billingham"; branches.distance = distance2; [nearestLoc addObject:branches]; NSLog(@"adding billingham"); }
Am I missing something with using NSNumber? If so, how would you get arround it?
解决方案
Instead of using ==, call compare: or isEqualToNumber:. When you use ==, you are comparing the pointers.
这篇关于从同一个float创建的两个NSNum根据==不相等的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!