Swift中如何修正打印逻辑:仅显示集合首元素并优化输出
问题修复方案
核心问题分析
- 冗余数组嵌套:你把
sorted返回的数组额外套了一层[],导致shortest和tallest变成了数组的数组([[PersonHeight]]类型),所以遍历tallest时会打印整个数组的默认描述,tallest.first取到的也是排序后的完整数组而非单个元素。 - 无效的人数统计:手动循环计数完全没必要,直接用
people.count就能获取人数。 - 结构体默认打印冗余:直接打印
PersonHeight实例会输出系统默认的结构体描述,需要手动提取name和formattedHeight来输出清晰信息。
修正后的完整代码
struct PersonHeight { let name: String let height: Int var formattedHeight: String { return "\(height / 12)'\(height % 12)" } } let James = PersonHeight(name: "James", height: 50) let Sam = PersonHeight(name: "Sam", height: 60) let Dude = PersonHeight(name: "Dude", height: 55) let array = [James, Sam, Dude] func personHeight(people: [PersonHeight]) { let personCount = people.count // 去掉外层[],直接使用sorted返回的数组 let shortest = people.sorted{ $0.height < $1.height } let tallest = people.sorted{ $0.height > $1.height } print("There are \(personCount) people and here are their names (sorted by tallest to shortest):") // 遍历排序后的数组,提取姓名和格式化身高打印 for person in tallest { print("\(person.name) - \(person.formattedHeight)") } // 直接取数组的first元素,访问具体属性输出 print("The shortest person is \(shortest.first!.name) (\(shortest.first!.formattedHeight)) and the tallest person is \(tallest.first!.name) (\(tallest.first!.formattedHeight))") } personHeight(people: array)
关键修改说明
- 移除
shortest和tallest的外层数组包裹,让它们直接是排序后的[PersonHeight]类型。 - 用
people.count替代手动循环计数,简化代码逻辑。 - 遍历打印时,明确输出
person.name和person.formattedHeight,避免默认的结构体冗余描述。 - 访问
first元素时,提取具体的name和formattedHeight属性,而非直接打印整个实例。
内容的提问来源于stack exchange,提问作者Raymond Coia
相关产品推荐
相关产品推荐

