代码之家  ›  专栏  ›  技术社区  ›  Amber

如何将数字列表的值与netlogo中名称列表中的项目相匹配?

  •  2
  • Amber  · 技术社区  · 6 年前

    我正在尝试一些东西(在netlogo中),但它不起作用。我想要一个数字列表中的位置值。我想用它产生的数字从名字列表中检索一个名字。

    因此,如果我有一个像[1 2 3 4]这样的列表,那么这个列表中有[“chicken”“duck”“monkey”“dog”] 我想让我的数字2与“duck”对应。

    到目前为止,我的zq是一个数字列表,我的usedstrategies是一个名字列表。

    let m precision (max zq) 1
    let l position m zq
    let p (position l zq) usedstrategies
    

    但当我尝试这一点时,结果将是错误的,因为我不是usedstrategies的一部分。

    想法?

    2 回复  |  直到 6 年前
        1
  •  4
  •   JenB    6 年前

    你需要 item 在与其他列表匹配后从列表中选择的基元。我不确定 precision 线路用于。然而,这里有一段自包含的代码,我认为它演示了您想要做的事情。请注意,NetLogo从0开始计算位置,而不是从1开始。我还在列表中使用了任意数字,这样您就不会混淆列表中的数字及其位置。

    to testme
      let usedstrategies (list "chicken" "duck" "monkey" "dog")
      let zq (list 5 6 7 8)
      let strategynum position 7 zq
      let thisstrategy item strategynum usedstrategies
      type "Selected strategy number " type strategynum
        type " which is " print thisstrategy
    end
    
        2
  •  2
  •   Nicolas Payette    6 年前

    Jen的解决方案非常好,但我认为这也是 table extension 。以下是一个示例:

    extensions [table]
    
    to demo
    
      let usedstrategies ["chicken" "duck" "monkey" "dog"]
      let zq [5 6 7 8]  
      let strategies table:from-list (map list zq usedstrategies)  
    
      ; get item corresponding with number 7:
      print table:get strategies 7
    
    end
    

    这里的“表”是一种数据结构,其中一组键与值相关联。在这里,数字是关键,战略是价值。

    如果您试图获取表中没有键的项目(例如。, table:get strategies 9 ),将出现以下错误:

    扩展异常:表中的9没有值。

    下面是关于代码如何工作的更多细节。

    为了构造表,我们使用 table:from-list reporter,它将列表列表作为输入,并返回一个表,其中每个子列表的第一项用作键,第二项用作值。

    为了构建列表列表,我们使用 map 原始的这一部分的理解有点棘手。这个 地图 原语需要两种类型的输入:一个或多个列表,以及应用于这些列表元素的报告器。首先是reporter,整个表达式需要放在括号内:

    (map list zq usedstrategies)
    

    这个表达式将我们的两个列表“zips”在一起:它接受 zq 以及 usedstrategies ,将其传递给 list reporter,它用这两个元素构造一个列表,并将该结果添加到一个新列表中。然后取 zq公司 第二个元素是 使用的策略 并对它们执行相同的操作,直到我们得到如下列表:

    [[5 "chicken"] [6 "duck"] [7 "monkey"] [8 "dog"]]
    

    请注意,压缩表达式也可以编写为:

    (map [ [a b] -> list a b ] zq usedstrategies)
    

    。。。但这是一种更迂回的方式。这个 列表 记者本身已经是我们想要的;没有必要构建一个单独的匿名报告者来做同样的事情。