有条件地从数组中删除元素

时间:2015-07-29 05:35:02

标签: ruby-on-rails ruby

我正在尝试使用我新获得但不完整的ruby知识来构造一些JSON数据。它基本上是rails应用程序的一部分,其中数据库是1个用户到多个关系(字段follower_id和followed_id)。 JSON的格式应为:

{"nodes":["1","102","10","61","6","54","29","84","82"],"edges":[["1","54"],["10","29"],["61","84"],["1","61"],["10","82"]]}

我想删除任何边数组,其中两个或其中一个数字不存在于nodes数组中。真实文件可能比这大得多,所以最有效的方法可能会很棒。

我的代码如下:

def self.joinup(id)
  c = Challenge.find(1)
  result={}
  user_ids  =  c.users.pluck(:id)
  result["nodes"] = user_ids.collect(&:to_s).flatten.uniq
  result["edges"] = Relationship.where(follower_id: user_ids).map{|h| [h.follower_id.to_s, h.followed_id.to_s]}

  #if elements of edges are not present in nodes then remove doublet
  result["nodes"] = result["nodes"]|result["edges"].flatten
  result
 end
 end

1 个答案:

答案 0 :(得分:1)

我的理解是你要删除其中两个或其中一个不再位于users表(节点数组)中的悬空关系(边缘)。

然后这应该这样做:

result["edges"].select! {|edge| result["nodes"].include?(edge[0]) && result["nodes"].include?(edge[1]) }