我怎样才能用 ruby 数组做这样的事情

How can I do something like this with ruby arrays

我有一个这样的用户数组:

users_array = [[1,text for 1],[2,text for 2],[3,text for 3],[4,text for 4],[5,text for 5]]

这里的第一个元素是 user_id,第二个元素是特定于同一数组中 user_id 的文本。

现在我正在尝试从这些数组中获取用户对象而不是 id。

users_array = [[#<User id: 1, encrypted_email: "">,text for 1],[#<User id: 2, encrypted_email: "">,text for 2],[#<User id: 3, encrypted_email: "">,text for 3],[#<User id: 4, encrypted_email: "">,text for 4],[#<User id: 5, encrypted_email: "">,text for 5]]

我尽量不循环数组并为数千名用户访问数据库一千次。

data = users_array.to_h
# find all users with single query and build your map
User.where(id: data.keys).map { |user| [user, data[user.id]] }

您可以使用 transpose to extract ids and values, and zip 来组合用户和值:

ids, values = users_array.transpose
users_array = User.find(ids).zip(values)