我有一个包含3列的文件.txt:ID-polygon-1,ID-polygon-2和distance。
当我将文件导入Netlogo时,我获得3个列表[[list1][list2][list3]]
,对应3列。
我使用table:from-list 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
?
非常感谢你的帮助。
答案 0 :(得分:2)
使用table:from-list
对您没有帮助:它期望"两个元素列表或对的列表" "对中的第一个元素是键,第二个元素是值。"这不是原始列表中的内容。
此外,NetLogo表(以及一般的associative arrays)不能有两个键。它们总是只是键值对。然而,没有什么可以阻止该值成为另一个表,在您的情况下,这就是您所需要的:表格表格!
然而,没有直接构建它的原语。您需要自己构建它:
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
结果。