英文:
Map function in Ruby for Array of Objects
问题
以下是翻译好的部分:
需要 "bcrypt"
users = [
{ username: "user", password: "qwertyuiop" },
{ username: "user1", password: "qwertyuiop1" },
{ username: "user2", password: "qwertyuiop2" },
{ username: "user3", password: "qwertyuiop3" },
]
def create_hash_digest(password)
BCrypt::Password.create(password)
end
def create_secure_users(list_of_users)
list_of_users.map { |user_record| user_record[:password] = create_hash_digest(user_record[:password]) }
end
puts create_secure_users(users)
它仅返回了经过哈希处理的密码。
预期返回一个相同对象的数组,但密码已被哈希处理:
users = [
{ username: "user", password: "hashed_password" },
{ username: "user1", password: "hashed_password" },
{ username: "user2", password: "hashed_password" },
{ username: "user3", password: "hashed_password" },
]
# 这里的hashed_password是保存在映射中的哈希密码
我期望得到一个对象数组,其中密码已被替换为哈希密码。
我可以使用each循环来实现这一点,但希望使用map。
英文:
Under is my array of Object
what i wanted to is to encrypt by password using a map
require "bcrypt"
users = [
{ username: "user", password: "qwertyuiop" },
{ username: "user1", password: "qwertyuiop1" },
{ username: "user2", password: "qwertyuiop2" },
{ username: "user3", password: "qwertyuiop3" },
]
def create_hash_digest(password)
BCrypt::Password.create(password)
end
def create_secure_users(list_of_users)
list_of_users.map { |user_record| user_record[:password] = create_hash_digest(user_record[:password]) }
end
puts create_secure_users(users)
it is returning just the hashed password
Expected to return an array of same objects but with hashed passwords
users = [
{ username: "user", password: "hashed_password" },
{ username: "user1", password: "hashed_password" },
{ username: "user2", password: "hashed_password" },
{ username: "user3", password: "hashed_password" },
]
#here hashed_password is hashed password that is saved in map
what I am expecting to get array of object where password is replaced with hashed password
I can achieve this with each loop but want to go with map
答案1
得分: 3
在map
函数中,返回值是最终的操作:
def create_secure_users(list_of_users)
list_of_users.map do |user_record|
{ username: user_record[:username], password: create_hash_digest(user_record[:password]) }
end
end
或者
def create_secure_users(list_of_users)
list_of_users.map do |user_record|
user_record.merge(password: create_hash_digest(user_record[:password]))
end
end
两者做的是相同的事情
英文:
In map function the return value is final the operation,
def create_secure_users(list_of_users)
list_of_users.map do |user_record|
{ username: user_record[:username], password: create_hash_digest(user_record[:password]) }
end
end
or
def create_secure_users(list_of_users)
list_of_users.map do |user_record|
user_record.merge(password: create_hash_digest(user_record[:password]))
end
end
do the same thing
答案2
得分: 0
感谢 @safak 和 @DaveNewton 提供了两种不同的方法:
使用 merge:
def create_secure_users(list_of_users)
list_of_users.map { |user_record| user_record.merge(password: create_hash_digest(user_record[:password])) }
end
通过在 map 中返回元素:
def create_secure_users(list_of_users)
list_of_users.map { |user_record|
user_record[:password] = create_hash_digest(user_record[:password])
user_record
}
end
英文:
Thanks to @safak and @DaveNewton drived 2 different approaches
using merge
def create_secure_users(list_of_users)
list_of_users.map { |user_record| user_record.merge(password: create_hash_digest(user_record[:password])) }
end
and by returning element in map
def create_secure_users(list_of_users)
list_of_users.map { |user_record|
user_record[:password] = create_hash_digest(user_record[:password])
user_record
}
end
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论