我有一个如下列表:
[[178 440] [175 440] [160 468] [160 440]]
每个子列表中的值对应于坐标x,y。
我想获得一个仅包含x和y的唯一值的列表。
从上面的列表中,结果将是:
[[178 440] [160 468]]
提前感谢您的帮助。
答案 0 :(得分:5)
根据你的例子,我认为通过" unique",你的意思是"到目前为止没有遇到"。
这是一种方法,使用非常灵活的reduce
:
to go
let pairs [[178 440] [175 440] [160 468] [160 440]]
print reduce [
ifelse-value (is-unique? ?2 ?1)
[ lput ?2 ?1 ]
[ ?1 ]
] fput [] pairs
end
to-report is-unique? [ pair other-pairs ]
report
(not member? (first pair) (map first other-pairs)) and
(not member? (last pair) (map last other-pairs))
end
is-unique?
报告者应该很容易理解:它使用map
来提取每个first
项{em> x )member?
1}},并检查other-pairs
的第一项是否不是last
。它对reduce
项( y )执行相同的检查。
{{3}}部分有点棘手,但也不是那么难。我们在对象列表(pair
)的前面添加一个空列表,我们将用作"累加器"对于符合我们标准的对。传递给fput [] pairs
的记者中的这个累加器将?1
,而reduce
依次是我们的每一对。所以我们在其中做的只是检查?2
相对于到目前为止累积的对是否是唯一的。如果是,我们将其添加到我们的累积对列表中。如果不是,我们会按原样退出列表,然后转到下一个?2
。