0

我今天正在学习 ruby​​,并且一直在从哈希中提取单个元素。

登录1.csv

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 然后将其分配给变量?

感谢您的任何帮助。

4

2 回答 2

0

您应该查看Core 中的 CSV 库

从这里的 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 表中只有一位经理。如果需要,您可以修改代码以分配一组管理器。

于 2012-07-09T07:19:05.490 回答
0

select()返回一个数组,因此请查看第一个(仅在您的情况下?)条目,它是您构造时的哈希:

mgrh = $table.select {|rEntry| rEntry["role"]=="mgr"}
mgr_role = mgrh.first["uName"] # => "manager"
于 2012-07-09T03:57:33.087 回答