从嵌套列表创建项目?

时间:2020-01-30 20:41:21

标签: list netlogo nested-lists

我正在努力使程序与通过列表传递信息的总体框架进行交互。

我有一个叫做“人”的品种,我用

导出有关他们的信息
touchBegan()

它非常适合导出该信息。我遇到的麻烦是使用我自己以主列表形式接收的信息来创建或更新人员。

我一直在解决它,这可能是一个foreach问题,但是问题是,尽管这使我可以对主列表的每个项目执行命令,但我还没有弄清楚如何访问单个嵌套项目。

所以,说:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.backgroundColor = UIColor(red: 216/255, green: 216/255, blue: 216/255,alpha: 0.3)
    super.touchesBegan(touches, with: event)
}

等问题在于语法将创建一个人员,然后将该人员设置为整个子列表。省略列表会引发错误,并且更具体地选择项目是站不住脚的,因为它是可变长度的列表。

有什么想法如何从嵌套列表中迭代选择项目? foreach甚至是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

我无法对其进行测试,但这对我来说是错误的:

to srti-lists
 ask people [ foreach [self] of people [
  set traits-list (list (who) (color) (heading)(xcor)(ycor)(shape)]]
set master-list [traits-list] of people
end 

ask已经遍及整个人,因此,似乎正在为每只乌龟分配所有乌龟的特征列表,然后主列表就是这些列表的列表。您可能想要:

to srti-lists
 ask people [
  set traits-list (list (who) (color) (heading)(xcor)(ycor)(shape)]
set master-list [traits-list] of people
end 

在特征设置上,无法设置who号-在创建海龟时会自动为其分配,并且永远不能更改。例如,尝试使用以下完整(损坏)的模型,您会得到一个错误:

to testme
  create-turtles 5
  ask one-of turtles [set who 10 ]
end

因此,当您说who被分配了整个子列表时,我不知道您的意思-who始终是整数并按顺序分配。

关于您提出的问题-如果您尝试set who item 0 master-list可以实际设置的变量,则会找到语法set