“有没有其他选择?”<=&燃气轮机&引用;C/Objective-C中的Perl操作符?

“有没有其他选择?”<=&燃气轮机&引用;C/Objective-C中的Perl操作符?,objective-c,perl,compare,Objective C,Perl,Compare,我正在实现一些定制的NSArray排序选择器,我想知道C/Objective-C中是否有类似操作符的东西 我有这个: if (self.count == otherObject.count) return 0; return (self.count > otherObject.count)? 1 : -1; 并且希望有(如在Perl中) 返回self.count otherObject.count; 也许您正在寻找的是比较:方法NSString,NSNumber等实现它。Cocoa中的所

我正在实现一些定制的NSArray排序选择器,我想知道C/Objective-C中是否有类似操作符的东西

我有这个:

if (self.count == otherObject.count) return 0;
return (self.count > otherObject.count)? 1 : -1;
并且希望有(如在Perl中)

返回self.count otherObject.count;

也许您正在寻找的是
比较:
方法<代码>NSString,
NSNumber
等实现它。Cocoa中的所有compare-like方法都会返回NSComparisonResult:

enum {
   NSOrderedAscending = -1,
   NSOrderedSame,
   NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
因此,您可以直接使用返回的整数值。假设问题中的
count
是一个
NSNumber
,您可以执行以下操作:

return [self.count compare:otherObject.count];
如果您的案例仅限于数字,并且您只想使用运算符,那么您可能可以使用好的旧减号。但请注意整数溢出!:

return self.count - otherObject.count;

不是用C,也可能不是用Objective-C

尽管函数特定于特定的操作数类型,但您可以非常轻松地编写函数:

int compare(int x, int y) {
    return x < y ? -1 : (x > y);
}

(请注意,这两个版本都依赖于
运算符,其中0表示false,1表示true。)

它被称为,它起源于Perl;除了Perl,只有Ruby和Groovy拥有它

嘿,丹尼,洛塔生气了:))我只是问是否有这样的接线员——如果没有,那就没什么戏剧性了t@Dani:编译语言没有理由不能或不应该有像
这样的运算符。这是一个完全合理的问题。答案恰好是否定的。马蒂亚斯,这正是我想要的:)一直以来,我不知怎么地假设“比较:”应该返回{-1,0,+1},但不知道它可以是任何正整数或负整数。。。因此您的金色“return self.count-otherObject.count”行正是我所期待的,我可以帮助您!但是,如果比较的数字可能相差很远,请注意使用减号时不会导致整数溢出。考虑案例<代码>返回Itmin - In Max < /COD>。在你的例子中,我猜
count
是一个
NSUInteger
,而
NSComparisonResult
NSInteger
,所以如果
self.count
是0,而
other对象,事情可能会出错。count
大于
INT\u MAX
。只是一个提醒而已!:)是的,这两个选项都是有效的,但我只是想看看如何简化排序选择器(如问题中所述),所以Mattias的答案非常准确
int compare(int x, int y) {
    return x < y ? -1 : (x > y);
}
#define COMPARE(x, y) ((x) < (y) ? -1 : ((x) > (y)))