Как сохранить результат моего алгоритма? - PullRequest
0 голосов
/ 25 июня 2010

У меня есть алгоритм, который просматривает всех пользователей моих сайтов, находя тех, которые имеют общее свойство с пользователем, используя алгоритм (переходя на определенную страницу). Он может найти несколько пользователей, каждый из которых может иметь несколько общих свойств. Алгоритм работает нормально, с точки зрения поиска совпадений, но у меня возникают проблемы с решением, как хранить данные, чтобы позже я смог использовать каждую единицу информации. Мне нужно иметь доступ как к найденным пользователям, так и к каждому из соответствующих общих свойств, поэтому я не могу просто создать строку. Это пример вывода, выполняемого с точки зрения пользователя 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 ]

1 голос
/ 25 июня 2010

Вы можете использовать хеш-таблицу, где ключом является объект пользователя, а значением является массив общих свойств.Предполагается, что сначала вам нужно выполнить поиск на основе пользователя.

Примерно так:

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

Затем вы можете получить доступ к таким значениям, как: @user_results[user1]
илиВы также можете перебрать все ключи, используя @user_results.keys

1 голос
/ 25 июня 2010

Возвращает массив хэшей со всеми пользователями и соответствующими им общими свойствами.

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 -%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...