You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何修正打印逻辑:仅显示集合首元素并优化输出

问题修复方案

核心问题分析

  1. 冗余数组嵌套:你把sorted返回的数组额外套了一层[],导致shortest和tallest变成了数组的数组([[PersonHeight]]类型),所以遍历tallest时会打印整个数组的默认描述,tallest.first取到的也是排序后的完整数组而非单个元素。
  2. 无效的人数统计:手动循环计数完全没必要,直接用people.count就能获取人数。
  3. 结构体默认打印冗余:直接打印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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:30:51