gpt4 book ai didi

ruby - 在 Ruby 中根据用户输入创建哈希数组

转载 作者:数据小太阳 更新时间:2023-10-29 08:38:00 27 4
gpt4 key购买 nike

我正在尝试创建一个简单的银行账户程序来练习一些 Ruby。这个想法是创建一个哈希数组。但是,我想使用用户输入来创建一个新的散列,无论是创建标题还是简单地为条目编号,例如 user1 或 user2。

如果我使用将用户名、密码和余额都存储在哈希中的设置,如下所示:

jhip = {
:pin => 1234,
:balance => 1000000
}

jdog = {
:pin => 2345,
:balance => 1000
}

accounts = [
jhip,
jdog
]

我觉得在数组中找到正确的用户名和/或告诉用户他们的名字已经被选择比我使用这样的设置要容易得多:

user1 = {
:username => "jhip",
:pin => 1234,
:balance => 1000000
}

user2 = {
:username => "jdog",
:pin => 2345,
:balance => 1000
}

accounts = [
user1,
user2
]

这个问题的实质是让用户输入成为散列的标题。我知道创建这样的哈希的符号:

h = hash.new #or
hash = {}

但我不知道如何使用输入作为标题。当我将输入存储为变量时,我可以使用该变量:

@username = gets.chomp
@username.to_i #or any method

但是如果我尝试使用变量名创建散列,我会覆盖输入。

@username = {} #no more using the response from gets

我想我要找的应该是这样的

@username = gets.chomp
@username.to_s => (some sort of code or command I'm unaware of) {}

然后我可以将键值对放入散列中。我不知道我是否可以使用 block 来完成此操作或其他操作。我对此还是个新手,所以如果我在这个问题上吃得太多了,我深表歉意。感谢您的帮助。

最佳答案

以下将创建一个散列,其中包含根据用户输入分配的用户名 key :

puts "Hey what's your username?"
username = gets.chomp
user = {
username: username,
pin: 10,
balance: 100
}
puts "Your account is: #{user}"

类似地,下面的代码会将一个新的哈希值插入到一个哈希值数组中,该哈希值具有基于用户输入分配的用户名键:

def create_user(username)
{
username: username,
pin: 10,
balance: 100
}
end

accounts = []
puts "Hey what's your username?"
username = gets.chomp
accounts.push(create_user(username))
puts "There are #{accounts.length} accounts"

为了在数组中找到一个元素,您可以简单地遍历每个元素并返回该元素的用户名是否与正确的用户名匹配。例如

accounts = [create_user('alice'), create_user('bob')]

def find_by_username(accounts, username)
accounts.each do |user|
return user if user[:username] == username
end
nil
end

puts find_by_username(accounts, 'alice')
puts find_by_username(accounts, 'bob')
puts find_by_username(accounts, 'charles')

如果用户名与给定的用户名匹配,此方法将遍历每个用户并返回用户。如果不存在这样的用户,它将返回 nil

Ruby 很好,因为很多这些类型的操作已经被抽象出来——数组响应 find 方法,该方法返回与代码块匹配的第一个元素,如果没有这样的元素则返回 nil元素存在。所以 find_by_username 的替代实现是

def find_by_username2(accounts, username)
accounts.find do |user|
user[:username] == username
end
end

或更简洁

def find_by_username3(accounts, username)
accounts.find { |user| user[:username] == username }
end

然而,每次您想通过用户名查找用户时,循环遍历哈希数组是一个相对较慢的操作。如果您改为使用哈希的哈希,则数据结构可能如下所示:

accounts = {
"alice" => { pin: 312, balance: -100 },
"bob" => { pin: 104, balance: 1000 }
}

并且您可以使用 accounts["bob"]

找到用户名为“bob”的用户

关于ruby - 在 Ruby 中根据用户输入创建哈希数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23400944/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com