我今天正在学习ruby,并且无法从哈希中提取单个元素。
role,uName,passwd
adm,admin1,a1
mgr,manager,m
user,user1,u1
adm,admin2,a2
def csvIntoHash
# load csv Into hash
$table = []
File.open("logIn1.csv") do|f|
columns = f.readline.chomp.split(',')
until f.eof?
row = f.readline.chomp.split(',')
row = columns.zip(row).flatten #build hash from array
$table << Hash[*row]
end
end
end
#
#main
csvIntoHash
#pulls all hash elements when role=mgr
puts $table.select {|rEntry| rEntry["role"]=="mgr"}
如何在role = mgr时仅提取uName,然后将其分配给变量?
感谢您的帮助。
答案 0 :(得分:0)
select()
返回一个数组,所以请看第一个(仅在你的情况下?)条目,这是你构造它时的哈希:
mgrh = $table.select {|rEntry| rEntry["role"]=="mgr"}
mgr_role = mgrh.first["uName"] # => "manager"
答案 1 :(得分:0)
您应该查看CSV library in Core
根据您在这里的CSV格式,如果您真正希望它获得经理的uName
,我有以下解决方案。
manager = ""
CSV.read("file.csv").each_with_index do |arr, index|
role_column = arr.index("role") if index == 0
if arr[role_column.to_i] == "mgr"
manager = arr[role_column.to_i + 1]
end
end
修改强>
显然,这个问题在CSV表格中只有一个管理员。如果需要,您可以修改代码以分配管理器数组。