按内部列表的特定索引对列表列表进行排序
Sorting list of lists by particular index of inner lists
我有一个看起来像这样的列表:
[["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
对列表进行排序。 (我知道它已经在 copy/pasted 版本中,但可能并不总是。)
sort
只是 returns 一个空列表(我什至不确定为什么,但我想这是一个单独的问题),并且 sort-by
似乎不起作用,因为它需要一个解析为布尔值的记者。
有什么巧妙的方法吗?或者我是否需要首先获取我想要排序的值列表,然后对其进行排序,然后遍历该列表,在原始列表中创建一个新的值列表,其中相应的项目值匹配?
编辑:使用 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
我有一个看起来像这样的列表:
[["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
对列表进行排序。 (我知道它已经在 copy/pasted 版本中,但可能并不总是。)
sort
只是 returns 一个空列表(我什至不确定为什么,但我想这是一个单独的问题),并且 sort-by
似乎不起作用,因为它需要一个解析为布尔值的记者。
有什么巧妙的方法吗?或者我是否需要首先获取我想要排序的值列表,然后对其进行排序,然后遍历该列表,在原始列表中创建一个新的值列表,其中相应的项目值匹配?
编辑:使用 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