objective-c - 在 Objective-C 中的最后一项之前创建一个逗号分隔的列表,其中包含 "and",特别是

标签 objective-c arrays string cocoa human-readable

我想编写一种方法,提供人类可读的数组字符串表示形式,必要时使用逗号空格(包括牛津逗号),并在末尾连接“和”。

例如,假设我有这些数组:

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/

相关文章:

ios - 条形按钮项目未正确对齐

arrays - 数组的 IsEmpty() 函数

c++ - substr 导致段错误

java - 放入完整英语词典的数据结构,以便从 Android 中的 String 快速返回所有可能的单词完成

javascript - 优化逻辑以部分匹配 2 个数组项

python - PIL draw.text() 将包含阿拉伯连字的字符串显示为两个单独的字形

objective-c - 运行时无法识别 Objective-C 框架中的 Swift 类别

objective-c - 将 NSInteger 转换为 float ,反之亦然

ios - deleteObject 在 Realm 中不起作用

ios - 如何将 [String] 拆分成行?