F# 有没有更有效或更惯用的方法来引用值表

问题描述 投票:0回答:1

如果有一个不变的值表,函数需要偶尔查找 ,比如说一个 4x5 的桌子,其中的列是水果,行是鸟类。我想要一个函数,给定一个水果和一只鸟在表中查找正确的值。

下面是我的做法,我想知道是否有更惯用的 F# 方法?或者更简单或更有效的方法?

let getter bird fruit =
    let listoflists =
    [ "Eagle", [ "Cherry", 1.1; "Pear", 1.4; "Orange", 1.2; "Apple", 1.1; "Banana", 1.0 ]
      "Hawk", [ "Cherry", 1.1; "Pear", 1.4; "Orange", 1.2; "Apple", 1.1; "Banana", 1.0 ]
      "Turkey", [ "Cherry", 1.1; "Pear", 1.1; "Orange", 1.1; "Apple", 1.0; "Banana", 1.0 ]
      "Chicken", [ "Cherry", 1.1; "Pear", 1.1; "Orange", 1.1; "Apple", 1.0; "Banana", 1.0 ] ]

    let lookup = [ for x, y in listoflists -> x, y |> Map.ofList ] |> Map.ofList
    lookup.[bird].[fruit]
f# nested-lists
1个回答
0
投票

我认为代码很好,但效率低下,因为列表和映射在每次调用中都会重新构建。如果列表不是太大并且函数不经常被调用,这可能完全没问题。

如果考虑效率,则必须将地图存储在函数之外。

© www.soinside.com 2019 - 2024. All rights reserved.