在NetLogo中组合和格式化列表

时间:2014-08-28 21:23:35

标签: netlogo

我有一个点对(在NetLogo坐标中)的列表,名为" coords"看起来像这样:

[[[255 97] [256 97]] 
 [[-131 408] [-129 407]]
 [[-125 406] [-122 405]] 
 [[-84 188]] [-83 188]]
 [[-303 200] [-304 203]]
 [[25 414] [19 415]]
 [[-128 256] [-125 254]]
 .......................................]

每个点对都有一个分类变量,它取一个值" I"," U"或" S"。我有一个单独的这些分类变量列表,称为" coord_class"与上面列出的点对相同的长度和顺序。

["S" "S" "U" "I" "S" "I" "U" ...]

我想做的是将相应的分类变量附加到点对,其方式如下所示:

[[[255 97 "S"] [256 97 "S"]] 
 [[-131 408 "S"] [-129 407 "S"]]
 [[-125 406 "U"] [-122 405 "U"]] 
 [[-84 188 "I"]] [-83 188 "I"]]
 [[-303 200 "S"] [-304 203 "S"]]
 [[25 414 "I"] [19 415 "I"]]
 [[-128 256 "U"] [-125 254"U"]]
 .......................................]

请注意,给定对中的两个点都采用相同的分类变量值。

我试图使用地图记者来做到这一点:

set coords (map [list ?1 ?2] coords coord_class)

,它给出一个如下所示的输出:

[[[[255 97] [256 97]] "S"] 
 [[[-131 408] [-129 407]] "S"]
 [[[-125 406] [-122 405]] "U"] 
 [[[-84 188]] [-83 188]] "I"]
 [[[-303 200] [-304 203]] "S"]
 [[[25 414] [19 415]] "I"]
 [[[-128 256] [-125 254]] "U"]
 .......................................]

这不适用于代码中的其他功能。任何建议,以帮助我获得所需的输出将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

您有一份列表清单。做你想做的事需要两个独立的map操作。最简单的方法是将任务分成两个小记者:

to-report add-classes [ coords classes ]
  report (map add-class coords classes)  
end

to-report add-class [ lists class ]
  report map [ lput class ? ] lists
end

然后您可以像这样使用它:

to go
  let coords [
    [ [ 255  97] [ 256  97] ]
    [ [-131 408] [-129 407] ]
    [ [-125 406] [-122 405] ]
    [ [ -84 188] [ -83 188] ]
    [ [-303 200] [-304 203] ]
    [ [  25 414] [  19 415] ]
    [ [-128 256] [-125 254] ]
  ]
  let coord_class ["S" "S" "U" "I" "S" "I" "U"]
  show add-classes coords coord_class
end

将打印所需的输出:

[[[255 97 "S"] [256 97 "S"]] [[-131 408 "S"] [-129 407 "S"]] [[-125 406 "U"] [-122 405 "U"]] [[-84 188 "I"] [-83 188 "I"]] [[-303 200 "S"] [-304 203 "S"]] [[25 414 "I"] [19 415 "I"]] [[-128 256 "U"] [-125 254 "U"]]]