プログラムがユーザー入力から受け取る日 (文字列形式) の配列があり、その長さは 1 ~ 7 です。受信した配列には、曜日名がフルテキストで含まれています。
受け取る可能性のある配列の例は次のとおりです。["Tuesday", "Monday", "Thursday"]
私がやろうとしているのは、この配列を並べ替えてMonday to Sunday
、全文名を略語に変換することです。したがって、上記の配列の並べ替え関数は、理想的には次を返します["M", "Tu", "Th"]
。
同じ日の重複は表示されず、アイテムが 1 つ未満になることも、7 つを超えることもありません。
ありがとう。
大雑把ですが、これはユーザーが日を選択する大まかな UI です。
選択した回答を使用しましたが、必要な場所に追加するだけに調整しました。私はそれを次のように適応させました:
-(NSArray*)array:(NSArray*)array collect:(id(^)(id object))block
{
NSMutableArray * result = [ NSMutableArray array ] ;
for( id object in array ) { [ result addObject:block( object) ] ; }
return result ;
}
-(NSArray*)arrayBySortingAndAbbreviatingDayNames:(NSArray*)arrayToSort
{
NSArray * dayNames = @[ @"Monday", @"Tuesday", @"Wednesday", @"Thursday", @"Friday", @"Saturday", @"Sunday" ] ;
NSArray * abbreviations = @[ @"M", @"Tu", @"W", @"Th", @"F", @"Sa", @"Su" ] ;
NSArray * array = [ self array:arrayToSort collect:^(NSString * dayName){
return @([ dayNames indexOfObject:dayName ]) ;
} ] ;
array = [ array sortedArrayUsingSelector:@selector( compare: ) ] ;
array = [ self array:array collect:^(NSNumber * index){
return abbreviations[ [ index integerValue ] ] ;
}];
return array ;
}