如何获取仅包含唯一值的列表?

Pie*_*rre 4 netlogo

我有一个列表如下:

[[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)

在此先感谢您的帮助.

Nic*_*tte 5

举个例子,我认为"独特"是指"到目前为止没有遇到".

这是一种方法,使用哦这么灵活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.