如何存储算法的结果?

时间:2010-06-25 09:34:39

标签: ruby-on-rails ruby

我有一个算法搜索我的所有网站用户,使用该算法找到与用户共享公共属性的用户(通过转到某个页面)。它可以找到多个用户,每个用户可以拥有多个共享属性。在查找匹配方面,该算法运行良好,但我无法确定如何存储数据,以便以后我能够使用每个信息单元。我需要能够访问找到的用户和每个相应的共享属性,所以我不能只是构建一个字符串。这是输出的一个示例,从用户1的角度运行:

用户4
sharedproperty3
sharedproperty6

用户6
sharedproperty6
sharedproperty10
shareproperty11

我需要做些什么才能存储这些数据,并且可以访问它的任何位置以进行进一步操作?我在考虑哈希的哈希,但我无法真正地围绕它。我对编程很陌生,特别是Ruby。谢谢你的阅读!

编辑 - 这是代码。我完全期待这是最不正确的方法,但这是我的第一次尝试,所以要温柔:) 因此,如果我正确地理解你们,而不是将兴趣添加到字符串中,我应该创建一个数组或一个哈希,在我找到它时添加每个兴趣,然后将它们中的每一个存储在数组或哈希中?非常感谢你的帮助。

def getMatchedUsers
  matched_user_html = nil
  combined_properties = nil
  online_user_list = User.logged_in.all
    shared_interest = false
    online_user_list.each do |n| # for every online user
      combined_properties = nil
      if n.email != current_user.email # that is not the current user 
      current_user.properties.each do |o| # go through all of the current users properties
        n.properties.each do |p| # go through the online users properties
              if p.interestname.eql?(o.interestname) # if the online users property matches the current user
                  shared_interest = true
                  if combined_properties == nil
                    combined_properties = o.interestname
                  else
                    combined_properties = combined_properties + ", " + o.interestname
                  end
              end
          end
          if shared_interest == true
                matched_user_html = n.actualname + ": " + combined_properties
            end
      end
    end
    end
    return matched_user_html
  render :nothing => true
end

2 个答案:

答案 0 :(得分:1)

这将返回包含所有用户及其对应的sharedproperties的哈希数组。

class User
  def find_matching_users
    returning Array.new do |matching_users|
      self.logged_in.each do |other_user|
        next if current_user == other_user # jump if current_user
        # see http://ruby-doc.org/core/classes/Array.html#M002212 for more details on the & opreator
        unless (common_properties = current_user.properties & other_user.properties).empty?
          matching_users << { :user => other_user, :common_properties => common_properties }
        end
      end
    end
  end
end

在您看来,您可以这样做:

<%- current_user.find_matching_users.each do |matching_user| -%>
  <%-# you can acccess the user with matching_user[:user] -%>
  <%-# you can acccess the common properties with matching_user[:common_properties] -%>
<%- end -%>

答案 1 :(得分:1)

您可以使用哈希表,其中键是用户对象,值是共享属性的数组。这假设您首先需要根据用户进行查找。

这样的事情:

 @user_results = { user1 => [sharedproperty3,sharedproperty7] , user2 => [sharedproperty10,sharedproperty11,sharedproperty12]}

然后您可以访问以下值: @user_results[user1]
或者您也可以使用@user_results.keys

遍历所有密钥