Ben*_*ero 0 arrays string cocoa objective-c human-readable
我想编写一个方法,提供一个人类可读的数组字符串表示,必要时包含逗号空格(包括牛津逗号),最后连接"和".
例如,假设我有这些数组:
NSArray *nun = @[];
NSArray *won = @[@"The Loneliest"];
NSArray *too = @[@"Peas", @"Pod"];
NSArray *tree = @[@"Apple", @"Falls", @"Far, Far Away"];
Run Code Online (Sandbox Code Playgroud)
我想写一个方法,如:
+ (NSString*) humanReadableListFromArray: (NSArray*) arr
{
// magic
}
Run Code Online (Sandbox Code Playgroud)
当我通过我的数组时,我希望它们看起来像这样:
@""
@"The Loneliest"
@"Peas and Pod"
@"Apple, Falls, and Far, Far Away"
Run Code Online (Sandbox Code Playgroud)
请注意,第一个只有1个项目,只是没有装饰的第一个项目.第二个,正好有两个项目,没有逗号,但确实有连接"和".第三项,包含两个以上的项目,每个项目之间包含一个逗号空间,最后一项包括and在逗号空间之后和项目之前的附加项目.
在Objective C中有一个简短的方法吗?我已经用Java等语言完成了这项工作,但我知道Objective C这样的方法-(NSString*)[NSArray componentsJoinedByString:]可能有助于实现这一点.
使用"和"替换字符串中的最后一个逗号无法解答此问题.(Objective-C)因为它没有解决最后一个数组项中的逗号.我也研究了像Objective-C这样的问题从对象数组中创建逗号分隔字符串的最简单方法,他们没有提到人类可读性这个很好的部分.
第三方图书馆@timgcarlson提到听起来很有希望.这是我本地做的......
- (NSString *)humanReadableListFromArray:(NSArray *)array withOxfordStyle:(BOOL)oxford {
if (array.count == 0) return @"";
if (array.count == 1) return array[0];
if (array.count == 2) return [array componentsJoinedByString:@" and "];
NSArray *firstItems = [array subarrayWithRange:NSMakeRange(0, array.count-1)];
NSString *lastItem = [array lastObject];
NSString *lastDelimiter = (oxford)? @", and " : @" and ";
return [NSString stringWithFormat:@"%@%@%@",
[firstItems componentsJoinedByString:@", "], lastDelimiter, lastItem];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
753 次 |
| 最近记录: |