2015-07-21 41 views
3

我有一个看起来像这样的列表:由内列出的特定索引排序列出清单

[["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似乎不起作用,因为它需要一个解析为布尔值的记者。

有没有一个聪明的方法来做到这一点?或者,我需要首先获取我想要排序的值列表,然后对其进行排序,然后遍历该列表,在原始列表中创建相应项目值匹配的值的新列表?

回答

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 
+0

伟大的答案!谢谢Seth – iusting

+0

仍然非常有帮助,但我认为对于Netlogo> 6,'task'语法不再适用,我们需要'sort-with [a - > item 1 a] my-list'和'to-report sort -with [key lst] 报告排序依据[[?1?2] - >(runresult key?1)<(runresult key?2)] lst end'? – nehalem

+0

谢谢nehalem!更新。 –