arrays - 在由可变结构元素组成的数组中的数据中使用 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
或类似)或最大(有?)值?
基本上,我希望能够对结构数组使用条件语句,例如:对于我的结构数组中的每个元素,获取数据满足条件的元素,并从中获取另一个数据的最小值。
谢谢!
解决方案
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))
对于最大值,使用maximum
和findmax
。
推荐阅读
- variables - 如何“设置”和“放置”变量,哪个名称由字符串和另一个变量组成?
- forms - 如何更改 TextFormField() 小部件颜色 Flutter
- php - usort 将字符串转换为日期
- qt - qt中翻译中的UpdateLanguage
- sql - [亚马逊](500310)无效操作:输入位置末尾的语法错误:684;
- azure - Azure DevOps 2020 - GraphClient
- z3py - 有没有办法在 z3py 中将范围与 Z3ints 一起使用?
- angular - 观察 HttpClient.post() 请求中的事件时如何获取响应头内容长度?- Angular Http 客户端
- sql-update - clickhouse如何保证每个pk(排序键)一个数据行?
- python - 任务:我正在尝试从字典列表中创建一个 pandas 数据框。问题:这会为每个字典项创建一个数据框