首页 > 解决方案 > 在由可变结构元素组成的数组中的数据中使用 findmin() - Julia

问题描述

假设我有以下结构:

mutable struct Car
    load
    locale
    availability
    odometer
end

我创建了一个数组:

fleet = Vector{Car}(undef, num_cars)

for i in 1:num_cars
   a, b, c, d = rand(4)
   fleet[i] = Car(a, b, c, d)
end

例如,我如何从数组中所有汽车的里程表中找到最小(有findmin或类似)或最大(有?)值?

基本上,我希望能够对结构数组使用条件语句,例如:对于我的结构数组中的每个元素,获取数据满足条件的元素,并从中获取另一个数据的最小值。

谢谢!

标签: arraysmethodsstructjuliamutable

解决方案


minimum使用带有映射参数的函数查找最小值非常简单:

julia> minimum(x->x.odometer, fleet)
0.08468003971220694

如果你还想要索引的最小值,你可以使用该findmin函数。不幸的是,由于某种原因,这不支持函数参数,因此您必须创建一个临时数组并应用于findmin该数组:

julia> findmin(getfield.(fleet, :odometer))
(0.08468003971220694, 1)

您也可以使用getproperty代替getfield,它们对您的结构做同样的事情,我不确定哪个更可取。可能,最惯用的解决方案是定义访问器函数,而不是直接使用字段值。例如:

odometer(car::Car) = car.odometer
minimum(odometer, fleet)
findmin(odometer.(fleet))

对于最大值,使用maximumfindmax


推荐阅读