Arrays 如何在ruby中循环通过哈希数组来查找用户名?
我试图循环使用这个散列数组来查找用户搜索的用户名。问题是每当我搜索除第一个值以外的任何内容时,它都不会填充Arrays 如何在ruby中循环通过哈希数组来查找用户名?,arrays,ruby,loops,hash,Arrays,Ruby,Loops,Hash,我试图循环使用这个散列数组来查找用户搜索的用户名。问题是每当我搜索除第一个值以外的任何内容时,它都不会填充 users = [ { username: "mashrur", password: "password1" }, { username: "jack", password: "password2" }, { username: "arya", password: "password3" }, { usern
users = [
{ username: "mashrur", password: "password1" },
{ username: "jack", password: "password2" },
{ username: "arya", password: "password3" },
{ username: "jonshow", password: "password4" },
{ username: "heisenberg", password: "password5" }
]
puts "Username"
temp_username = gets.chomp
users.each do |user_record|
if user_record[:username] == temp_username
puts "Succesfully Logged In"
break
else
puts "Please try again"
break
end
end
if user\u record[:username]==temp\u username
的两个分支都使用break
这意味着您的循环将始终在第一次迭代之后完成
作为建议,您可以尝试用以下方式重写代码:
用户=[
{用户名:“mashrur”,密码:“password1”},
{用户名:“jack”,密码:“password2”},
{用户名:“arya”,密码:“password3”},
{用户名:“jonshow”,密码:“password4”},
{用户名:“海森堡”,密码:“password5”}
]
输入“用户名”
temp\u username=gets.chomp
user=users.find{| user_record | user_record[:username]==temp_username}
如果用户
放入“成功登录”
其他的
放入“请再试一次”
结束
根据您的逻辑,您将在第一个元素处从循环中断开。
我想你应该改变一下
...
temp_username = gets.chomp
user = users.find { |u| u[:username] == temp_username }
如果有任何用户的用户名等于temp_username
,它将第一个用户名分配给user
变量。
然后:
听起来你想一直询问用户名,直到找到一个登录的用户;也就是说,直到
h[:username]
等于为users
中的一个哈希值h
输入的名称。如果是这样,您希望首先构造一个循环,显示输入的每个用户名的结果,并提供在找到登录用户时中断循环的方法
loop do
...
<display result for current user entry>
<break if named user is logged in>
end
看find
返回哈希值h
,如果users
包含此类哈希值,则返回nil
最后一步是显示结果,如果指定用户登录,则中断循环
users = [
{ username: "mashrur", password: "password1" },
{ username: "jack", password: "password2" },
{ username: "arya", password: "password3" },
{ username: "jonshow", password: "password4" },
{ username: "heisenberg", password: "password5" }
]
loop do
print "Username: "
name = gets.chomp
found = users.find { |h| h[:username] == name }
...
<display result for current user entry>
<break if the value of name is logged in>
end
loop do
print "Username: "
name = gets.chomp
found = users.find { |h| h[:username] == name }
puts found.nil? ? "Please try again" : "Succesfully Logged In"
break unless found.nil?
end
下面是一个对话示例:
Username: bob
Please try again
Username: sue
Please try again
Username: jack
Succesfully Logged In
您选择的答案表明,如果输入的第一个用户名未登录,您只需停止。如果是,为什么会提示“重试”?(另外,我不知道你所说的“填充”是什么意思。)提醒Ruby没有Rail的方法
present
。(无导轨标记。)
loop do
print "Username: "
name = gets.chomp
found = users.find { |h| h[:username] == name }
puts found.nil? ? "Please try again" : "Succesfully Logged In"
break unless found.nil?
end
Username: bob
Please try again
Username: sue
Please try again
Username: jack
Succesfully Logged In