假设我有4个整数。排序4整数,从最小到最大
int a = 4;
int b = 2;
int c = 4;
int d = 1;
我怎样才能从最小到最大排序这些整数。输出需要是这样的:d, b, a, c
大多数排序方法只给我排序整数的值。我需要知道这个名字。
编辑:好的,我正在写一个AI算法。我有4个存储方向优先级的整数。 (如果AI进入墙壁,则选择下一个最佳方向)。所以,我需要找到最低的整数,如果AI不能这样移动,我选择第二个到最低等。
假设我有4个整数。排序4整数,从最小到最大
int a = 4;
int b = 2;
int c = 4;
int d = 1;
我怎样才能从最小到最大排序这些整数。输出需要是这样的:d, b, a, c
大多数排序方法只给我排序整数的值。我需要知道这个名字。
编辑:好的,我正在写一个AI算法。我有4个存储方向优先级的整数。 (如果AI进入墙壁,则选择下一个最佳方向)。所以,我需要找到最低的整数,如果AI不能这样移动,我选择第二个到最低等。
这是一个客观的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
)
呃,基于字典的编程。帮你一个忙,让这个课程适合你。 –
@DaveDeLong我在编码时使用了适当的类,但考虑到OP是以int开头的,我并不打算跳到2-3页的解决方案。这暴露了他们在objC中的一些基本更常见的类 –
您已经标记了这个Objective-C,但是您没有编写任何建议使用Objective-C。如果你想使用Objective-C,我会把元素放到一个NSMutableArray中(他们需要被转换成NSNumbers来做到这一点),然后让数组排序它们,如here所示。
如果您只是想将它们放入一个直的C数组中,您可以使用heapsort()
,qsort()
或mergesort()
对它们进行排序。
这里似乎有些混淆;在您的示例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
字段/属性。
等待,1是不大于4 – bowlerae
我累了,好吧! – Sosumi
感觉就像你以错误的方式接近问题(让变量名看起来毫无用处,你已经有了价值),也许给你想要解决的问题提供更多细节将会有所帮助。 – Nick