我经常遇到情况,特别是在C++中进行排序,我在比较一系列字段以比较更大的结构.一个简化的例子:
struct Car{ Manufacturer make; ModelName model; Year year; }; bool carLessThanComparator( const Car & car1, const Car & car2 ){ if( car1.make < car2.make ){ return true; }else if( car1.make == car2.make ){ if( car1.model < car2.model ){ return true; }else if( car1.model == car2.model ){ if( car1.year < car2.year ){ return true; } } } return false; }
我的本能方法似乎很麻烦,特别是对于超过3个领域.你将如何在C++中构建这一系列的比较?其他语言是否提供更简洁或优雅的语法?
好吧,如果你的函数在if子句中返回一个返回值,那么就不需要显式的else,因为它已经被拯救了.这可以节省"缩进谷":
bool carLessThanComparator( const Car & car1, const Car & car2 ) { if( car1.make < car2.make ) return true; if ( car1.make != car2.make ) return false; if( car1.model < car2.model ) return true; if( car1.model != car2.model ) return false; if( car1.year < car2.year ) return true; return false; }
我也喜欢MarkusQ的LISPish短路方法.