我有一个列表如下:
[[178 440] [175 440] [160 468] [160 440]]
Run Code Online (Sandbox Code Playgroud)
每个子列表中的值对应于坐标x,y.
我想获得一个只包含x和y唯一值的列表.
从上面的列表中,结果将是:
[[178 440] [160 468]]
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
举个例子,我认为"独特"是指"到目前为止没有遇到".
这是一种方法,使用哦这么灵活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
Run Code Online (Sandbox Code Playgroud)
该is-unique?
记者应该是很容易理解:它使用map
提取first
项目(X各的)other-pairs
,并检查的第一个项目pair
是不是member?
这一点.它对last
项目(y)执行相同的检查.
这reduce
部分有点棘手,但也不是那么难.我们在pair(fput [] pairs
)列表的前面添加一个空列表,我们将用它们作为满足我们标准的对的"累加器".这个累加器将?1
在记者传递的内部reduce
,并将?2
依次成为我们的每一对.所以我们在其中所做的只是检查?2
相对于迄今累积的对是否是唯一的.如果是,我们将其添加到我们的累积对列表中.如果不是,我们将原样保留原样,然后继续下一个?2
.