Golang中如何从多个数值中获取最大值
Golang中如何从多个数值中获取最大值 我想从患者数据中获取最大的年龄值,
package main
import (
"fmt"
"math"
//"reflect"
)
type patient_details struct {
name string
age int
gender string
}
func main() {
var patient1 = patient_details{"Jack", 22, "male"}
var patient2 = patient_details{"Daniel", 34, "male"}
var patient3 = patient_details{"Sarah", 12, "female"}
var patient4 = patient_details{"Superman", 52, "male"}
fmt.Println("who is the oldest patient in our hospital?")
var oldest_patient = math.Max(patient1.age, patient2.age, patient3.age, patient4.age)
fmt.Println(oldest_patient)
}
我尝试了 max 函数,但它只适用于两个 float64 变量,有什么建议吗?
谢谢
更多关于Golang中如何从多个数值中获取最大值的实战教程也可以访问 https://www.itying.com/category-94-b0.html
请问,您能演示一下吗?
感谢大家的支持。
更多关于Golang中如何从多个数值中获取最大值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
感谢您的帮助,排序方法确实更简单、更容易且代码量更少,尽管循环方法更有趣。
您可以将多个值存储在切片中,然后只需在范围内查找任何值——最小值、最大值等。
排序的最佳时间复杂度是 O(n log n),而一次迭代扫描可以在 O(n) 时间内找到最小值和最大值。
最优解只是一个简单的循环,遍历输入即可。
age := []int{patient1.age,patient2.age,patient3.age,patient4.age}
对于小型数组来说这可能不是问题,但对于大型数组来说将是一种内存浪费,解决这个问题无需分配新数组,正如所提到的,仅需一个循环就足以找到最大值和最小值。
可以通过对年龄数组进行排序来找到最大和最小值。
package main
import (
"fmt"
"sort"
//"reflect"
)
type patient_details struct {
name string
age int
gender string
}
func main() {
var patient1 = patient_details{"Jack", 22, "male"}
var patient2 = patient_details{"Daniel", 34, "male"}
var patient3 = patient_details{"Sarah", 12, "female"}
var patient4 = patient_details{"Superman", 52, "male"}
fmt.Println("who is the oldest patient in our hospital?")
age := []int{patient1.age,patient2.age,patient3.age,patient4.age}
sort.Ints(age)
fmt.Println("smallest:", age[0], ",Oldest:", age[len(age)-1])
}
在Go语言中,math.Max函数确实只能比较两个float64类型的值。要获取多个数值中的最大值,你可以使用循环来比较这些值。以下是针对你的患者数据获取最大年龄的示例代码:
package main
import (
"fmt"
)
type patient_details struct {
name string
age int
gender string
}
func main() {
var patient1 = patient_details{"Jack", 22, "male"}
var patient2 = patient_details{"Daniel", 34, "male"}
var patient3 = patient_details{"Sarah", 12, "female"}
var patient4 = patient_details{"Superman", 52, "male"}
fmt.Println("who is the oldest patient in our hospital?")
// 将患者放入切片中以便遍历
patients := []patient_details{patient1, patient2, patient3, patient4}
// 初始化最大年龄为第一个患者的年龄
maxAge := patients[0].age
oldestPatient := patients[0].name
// 遍历所有患者,比较年龄
for _, patient := range patients {
if patient.age > maxAge {
maxAge = patient.age
oldestPatient = patient.name
}
}
fmt.Printf("The oldest patient is %s with age %d\n", oldestPatient, maxAge)
}
如果你只需要获取最大年龄值而不需要患者姓名,可以使用更简洁的方式:
func main() {
var patient1 = patient_details{"Jack", 22, "male"}
var patient2 = patient_details{"Daniel", 34, "male"}
var patient3 = patient_details{"Sarah", 12, "female"}
var patient4 = patient_details{"Superman", 52, "male"}
ages := []int{patient1.age, patient2.age, patient3.age, patient4.age}
maxAge := ages[0]
for _, age := range ages {
if age > maxAge {
maxAge = age
}
}
fmt.Println("Maximum age:", maxAge)
}
对于通用情况,你可以创建一个函数来获取任意整数切片中的最大值:
func maxInt(values []int) int {
if len(values) == 0 {
return 0
}
max := values[0]
for _, v := range values[1:] {
if v > max {
max = v
}
}
return max
}
func main() {
ages := []int{22, 34, 12, 52}
fmt.Println("Maximum age:", maxInt(ages))
}
从Go 1.21版本开始,标准库中新增了cmp包,其中包含了Max函数,可以用于比较任意可比较类型的值:
package main
import (
"cmp"
"fmt"
)
func main() {
ages := []int{22, 34, 12, 52}
maxAge := ages[0]
for _, age := range ages[1:] {
maxAge = cmp.Max(maxAge, age)
}
fmt.Println("Maximum age:", maxAge)
}

