Hashtable “如何使用该功能”;表:get";(表扩展)何时需要两个键?

Hashtable “如何使用该功能”;表:get";(表扩展)何时需要两个键?,hashtable,netlogo,Hashtable,Netlogo,我有一个文件.txt,有3列:ID-polygon-1、ID-polygon-2和distance。 当我将文件导入Netlogo时,我获得了3个列表[[list1][list2][list3]],这3个列表对应于3列 我使用table:from list创建了一个包含3个列表内容的表。 我获得{{table:[[1 1][67 518][815 127]]}(该表显示数据集的前两行) 例如,我想得到ID-polygon-1=1(list1)和ID-polygon-2=67(list1)之间的距

我有一个文件.txt,有3列:ID-polygon-1、ID-polygon-2和distance。 当我将文件导入Netlogo时,我获得了3个列表
[[list1][list2][list3]]
,这3个列表对应于3列

我使用
table:from list
创建了一个包含3个列表内容的表。 我获得
{{table:[[1 1][67 518][815 127]]}
(该表显示数据集的前两行)

例如,我想得到ID-polygon-1=1(list1)和ID-polygon-2=67(list1)之间的距离(list3)的值,即815

当我需要2个键(ID-polygon-1和ID-polygon-2)时,如何使用
table:get table key

非常感谢你的帮助

在这方面,使用不会有帮助:它需要“一个包含两个元素列表或对的列表”,其中“对中的第一个元素是键,第二个元素是值”。这不是原始列表中的内容

此外,NetLogo表(通常)不能有两个键。它们始终只是键值对。但是,没有什么可以阻止该值成为另一个表,在您的情况下,这就是您需要的:一个表的表

但是,没有直接构建的原语。您需要自己构建它:

extensions [ table ]
globals [ t ]

to setup
  let lists [
    [   1   1 ] ; ID-polygon-1 column
    [  67 518 ] ; ID-polygon-2 column
    [ 815 127 ] ; distance column
  ]
  set t table:make
  foreach n-values length first lists [ ? ] [
    let id1  item ? (item 0 lists)
    let id2  item ? (item 1 lists)
    let dist item ? (item 2 lists)
    if not table:has-key? t id1 [
      table:put t id1 table:make
    ]
    table:put (table:get t id1) id2 dist
  ]
end
以下是打印结果表时得到的结果:

{{table: [[1 {{table: [[67 815] [518 127]]}}]]}}
这里有一个小记者,可以方便地与桌子保持一定距离:

to-report get-dist [ id1 id2 ]
  report table:get (table:get t id1) id2
end

使用
get dist 1 67
将得到您想要的
815
结果。

太棒了!非常感谢尼古拉斯!我不明白为什么从
import world
将我的风景导入Netlogo后,代码不起作用。但是,当我不导入我的风景时,它会起作用。表扩展是否可能不适用于导出世界?非常感谢您的帮助。看起来您遇到了一个老错误:我认为您需要在执行
导入world
后从原始列表重新初始化表。你能做到吗?谢谢你,尼古拉斯!如何重新初始化我的表?在我的函数中,我第一次将数据集导入如下:
let data split-to-n-lists 3将文件读入列表“Polygons.txt”
。然后,我使用了
sett表中的相同代码:make…
。非常感谢你的帮助