我想编写一种方法,提供人类可读的数组字符串表示形式,必要时使用逗号空格(包括牛津逗号),并在末尾连接“和”。
例如,假设我有这些数组:
NSArray *nun = @[];
NSArray *won = @[@"The Loneliest"];
NSArray *too = @[@"Peas", @"Pod"];
NSArray *tree = @[@"Apple", @"Falls", @"Far, Far Away"];
我想写一个像这样的方法:
+ (NSString*) humanReadableListFromArray: (NSArray*) arr
{
// magic
}
当我传递数组时,我希望它们看起来像这样:
@""
@"The Loneliest"
@"Peas and Pod"
@"Apple, Falls, and Far, Far Away"
请注意,第一个恰好有 1 个项目只是第一个没有装饰的项目。第二个恰好有 2 个项目,没有逗号,但有连接的“和”。第三个项目有超过 2 个项目,每个项目之间有一个逗号空格,最后一个项目在逗号空格之后、该项目之前包含一个额外的 and
.
在 Objective C 中是否有一种简短的方法可以做到这一点?我已经用 Java 等语言完成了此操作,但我知道 Objective C 具有诸如 -(NSString*)[ 之类的方法NSArray ComponentsJoinedByString:]
可能会对此有所帮助。
Replace last comma in string with an "and". (Objective-C)没有回答这个问题因为它不处理最后一个数组项中的逗号。我还研究了类似 Objective-C Simplest way to create comma separated string from an array of objects 的问题,而且他们没有提到人类可读性的这个很好的部分。
最佳答案
@timgcarlson 提到的第三方库听起来很有希望。这是我 native 要做的事情...
- (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];
}
关于objective-c - 在 Objective-C 中的最后一项之前创建一个逗号分隔的列表,其中包含 "and",特别是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31300628/