Erlang 列表理解,遍历两个列表并排除值

发布于 2024-08-25 08:27:14 字数 317 浏览 5 评论 0原文

我需要在 Erlang 中生成一组坐标。给定一个坐标,比如 (x,y) 我需要生成 (x-1, y-1), (x-1, y), (x-1, y+1), (x, y-1), (x,y+1)、(x+1,y-1)、(x+1,y)、(x+1,y+1)。基本上除了中间坐标 (x,y) 之外的所有周围坐标。为了生成所有九个坐标,我当前执行以下操作:

[{X,Y} || X<-lists:seq(X-1,X+1), Y<-lists:seq(Y-1,Y+1)]

但这会生成所有值,包括 (X,Y)。如何使用列表理解中的过滤器从列表中排除 (X,Y)?

I need to generate a set of coordinates in Erlang. Given one coordinate, say (x,y) I need to generate (x-1, y-1), (x-1, y), (x-1, y+1), (x, y-1), (x, y+1), (x+1, y-1), (x+1, y), (x+1, y+1). Basically all surrounding coordinates EXCEPT the middle coordinate (x,y). To generate all the nine coordinates, I do this currently:

[{X,Y} || X<-lists:seq(X-1,X+1), Y<-lists:seq(Y-1,Y+1)]

But this generates all the values, including (X,Y). How do I exclude (X,Y) from the list using filters in the list comprehension?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无所的.畏惧 2024-09-01 08:27:14
[{X,Y} || X <- lists:seq(X0-1,X0+1),
          Y <- lists:seq(Y0-1,Y0+1), {X,Y} =/= {X0,Y0}].
[{X,Y} || X <- lists:seq(X0-1,X0+1),
          Y <- lists:seq(Y0-1,Y0+1), {X,Y} =/= {X0,Y0}].
情域 2024-09-01 08:27:14

我认为区分参数和生成的值会有一点帮助:

[{Xc,Yc} || Xc<-lists:seq(X-1,X+1), Yc<-lists:seq(Y-1,Y+1), Xc=/=X orelse Yc=/=Y]

否则

[{Xc,Yc} || Xc<-lists:seq(X-1,X+1), Yc<-lists:seq(Y-1,Y+1)] -- [{X,Y}]

I think distinguish between parameters and generated values will help a little:

[{Xc,Yc} || Xc<-lists:seq(X-1,X+1), Yc<-lists:seq(Y-1,Y+1), Xc=/=X orelse Yc=/=Y]

or else

[{Xc,Yc} || Xc<-lists:seq(X-1,X+1), Yc<-lists:seq(Y-1,Y+1)] -- [{X,Y}]
岁月染过的梦 2024-09-01 08:27:14

添加 -- [{X,Y}] 可能是最简单的事情。

Adding -- [{X,Y}] would probably be the easiest thing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文