面试题答案
一键面试#import <Foundation/Foundation.h>
NSArray<NSString *> *extractValuesForKey(NSArray<NSDictionary *> *array, NSString *key) {
NSMutableArray<NSString *> *resultArray = [NSMutableArray array];
for (NSDictionary *dict in array) {
id value = dict[key];
if ([value isKindOfClass:[NSString class]]) {
[resultArray addObject:value];
}
}
return resultArray;
}
为什么这样编写:
- 函数命名:函数名
extractValuesForKey
清晰地表达了该函数的功能是提取特定键对应的值,符合命名约定中函数名应表意明确的要求。 - 参数命名:
array
代表包含字典的数组,key
代表要提取值的键,命名简洁且表意清晰。 - 变量命名:
resultArray
表示存储结果的数组,value
表示从字典中获取的值,符合命名清晰的规范。 - 类型标注:在Objective-C 2.0引入泛型后,使用
NSArray<NSString *>
明确表示数组中元素的类型,使用NSArray<NSDictionary *>
明确表示传入数组中元素是字典类型,使代码可读性更强,也有助于编译器进行类型检查。 - 遍历数组:使用
for - in
循环简洁地遍历数组,这是Objective-C中常用的遍历集合的方式。 - 类型检查:在添加值到结果数组之前,使用
[value isKindOfClass:[NSString class]]
检查值的类型,确保添加到数组中的元素都是NSString
类型,这保证了代码的健壮性。