按内部列表的特定索引对列表列表进行排序

时间:2015-07-21 17:17:15

标签: sorting netlogo

我的列表看起来像这样:

[["Local 7" 1 "say" "Say: Inspect Fences"] ["Local 7" 1 "do" "Do: Shepherd Cows"] ["Local 6" 1 "say" "Say: Shepherd Cows"] ["Local 6" 1 "do" "Do: Shepherd Cows"] ["Local 6" 2 "say" "Say: Shepherd Cows"] ["Local 6" 2 "do" "Do: Shepherd Cows"] ["Local 7" 2 "say" "Say: Inspect Fences"] ["Local 7" 2 "do" "Do: Shepherd Cows"] ["Local 6" 3 "say" "Say: Shepherd Cows"] ["Local 6" 3 "do" "Do: Shepherd Cows"] ["Local 7" 3 "say" "Say: Inspect Fences"] ["Local 7" 3 "do" "Do: Inspect Fences"]]

我想按item 1对列表进行排序。 (我知道它已经在复制/粘贴版本中,但可能并不总是如此。)

sort只返回一个空列表(我甚至不知道为什么,但我想这是一个单独的问题),sort-by似乎不起作用,因为它需要一个解析的记者布尔值。

有一种聪明的方法吗?或者我是否需要首先获取我要排序的值的列表,然后对其进行排序,然后迭代该列表,在原始列表中创建相应项值匹配的值的新列表?

1 个答案:

答案 0 :(得分:3)

编辑:使用NetLogo 6语法更新

您可以很容易地将其转换为sort-by

to-report sort-with [ key lst ]
  report sort-by [ [a b] -> (runresult key a) < (runresult key b) ] lst
end

然后你就这样使用它:

sort-with [ l -> item 1 l ] my-list