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