假设我有4个整数。
int a = 4;
int b = 2;
int c = 4;
int d = 1;如何从小到大对这些整数进行排序。输出应该是这样的:d, b, a, c大多数排序方法只给出排序后的整数的值。我需要知道他的名字。
编辑:嗯,我正在写一个AI算法。我有4个整数来存储方向优先级。(如果AI进入一堵墙,它会选择下一个最佳方向)。因此,我需要找到最低的int,如果AI不能以这种方式移动,我选择倒数第二个,依此类推。
发布于 2012-01-24 08:52:50
这是一种objective-c方法。不幸的是,你不会享受到编写AI部分的乐趣,排序已经内置到库中了。
int north = 1, south = 3, east = 2, west =4;
NSDictionary * nDict = [NSDictionary dictionaryWithObjectsAndKeys:@"north", @"name", [NSNumber numberWithInt:north], @"value", nil];
NSDictionary * sDict = [NSDictionary dictionaryWithObjectsAndKeys:@"south", @"name", [NSNumber numberWithInt:south], @"value", nil];
NSDictionary * eDict = [NSDictionary dictionaryWithObjectsAndKeys:@"east", @"name", [NSNumber numberWithInt:east], @"value", nil];
NSDictionary * wDict = [NSDictionary dictionaryWithObjectsAndKeys:@"west", @"name", [NSNumber numberWithInt:west], @"value", nil];
NSArray * toBeSorted = [NSArray arrayWithObjects:nDict,sDict,eDict,wDict,nil];
NSArray * sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"value" ascending:NO]];
NSArray * sorted = [toBeSorted sortedArrayUsingDescriptors:sortDescriptors];
NSLog(@"sorted %@", sorted);输出
2012-01-23 19:50:21.079 TestEnvironment[19792:207] sorted (
{
name = west;
value = 4;
},
{
name = south;
value = 3;
},
{
name = east;
value = 2;
},
{
name = north;
value = 1;
}
)现在,您可以通过以下方式检查最高优先级
NSString * highestPriority = [[sorted objectAtIndex:0] objectForKey:@"name"];现在,您有了一些可以查找的类(NSArray, NSDictionary, NSSortDescriptor, NSNumber)
发布于 2012-01-24 08:32:00
这里似乎有些混乱;在你的例子中,a不是值4的“名称”,它是一个当前包含4的整数变量的名称。换句话说,"a“不是程序数据的一部分。
我假设您的意思是,您希望使用值作为键对名称/值对进行排序。一种常见的方法是为您的对定义一个类型,创建一个集合,然后对该集合进行排序。
在普通的C中,你可以声明:
typedef struct
{
char *name;
int value;
} MyPair;您可以创建一个这样的数组,并使用标准的C函数进行数组排序,只使用value字段作为键。
在Objective-C中,您可以为您的对象对声明一个类:
@interface MyPair : NSObject
{
NSString *name;
int value;
}
// methods/properties
@end您可以创建MyPair实例的NSMutableArray,然后对数组进行排序,同样,在对排序算法进行比较时,只需使用value属性(或实例变量)即可。
当然,还有其他变体。排序后,可以遍历排序后的数组并显示name字段/属性。
发布于 2012-01-24 08:22:13
您已经标记了这个Objective-C,但是您还没有编写任何建议使用Objective-C的代码。如果您想使用Objective-C,我会将元素放入一个NSMutableArray中(需要将它们转换为NSNumbers ),并让数组对它们进行排序,如here所示。
如果只想将它们放入一个直接的C数组中,可以使用heapsort ()、qsort()或mergesort()对它们进行排序。
https://stackoverflow.com/questions/8980453
复制相似问题