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

Julia中按price排序命名元组列表及字典列表用findmin/findmax

问题解答

一、按"price"字段排序命名元组列表

注意:你写的初始代码并非命名元组数组,而是包含Pair元素的Tuple数组。正确的命名元组需使用不带引号的字段名,格式为(name="IBM", shares=100, price=91.2)。

正确的命名元组数组定义

portfolio = [
    (name="IBM", shares=100, price=91.2),
    (name="AAPL", shares=50, price=643.22),
    (name="FB", shares=150, price=21.09),
    (name="HPQ", shares=35, price=31.75),
    (name="YHOO", shares=45, price=16.35),
    (name="ACME", shares=75, price=115.65)
]

按price字段排序的方法

方法1:用by参数指定排序依据

sorted_portfolio = sort(portfolio, by=x->x.price)

方法2:Julia 1.9+ 支持直接按字段名排序

sorted_portfolio = sort(portfolio, :price)

如果必须使用原Tuple+Pair结构(不推荐,访问效率低),可先转换为字典再提取价格:

sorted_portfolio = sort(portfolio, by=x->Dict(x)["price"])

二、对字典列表使用findmin和findmax函数

Base Julia的findmin/findmax不支持by关键字参数,这是你报错的直接原因。可通过以下两种方式实现需求:

方法1:用argmin/argmax获取索引后提取元素

# 找到价格最低的字典
min_idx = argmin(x->x["price"], portfolio)
cheap = portfolio[min_idx]

# 找到价格最高的字典
max_idx = argmax(x->x["price"], portfolio)
expensive = portfolio[max_idx]

方法2:提取价格数组后匹配原元素

prices = [x["price"] for x in portfolio]
min_price, min_idx = findmin(prices)
cheap = portfolio[min_idx]

max_price, max_idx = findmax(prices)
expensive = portfolio[max_idx]

错误原因说明

  1. findmin报错:Base Julia的findmin没有by参数,你传入的by=x->x["price"]属于未支持的关键字,触发MethodError。
  2. sort报错:你的初始“命名元组”实际是Tuple{Pair{String, String}, Pair{String, Int64}, Pair{String, Float64}}类型,Tuple仅支持整数索引(如x[3]),无法用字符串x["price"]访问,因此触发getindex方法不存在的错误。

内容的提问来源于stack exchange,提问作者Vinod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:29:54