Ruby 带数组的表,返回哈希

Ruby 带数组的表,返回哈希,ruby,hash,Ruby,Hash,我有一个数组[“1”、“1”、“a”、“b”、“y”]和表1: table1 POSITION NAME VALUE CODE 1 Animal Dog 1 1 Animal Cat 2 1 Animal Bird 3 2 Place USA 1 2 Place Other 2 3

我有一个数组
[“1”、“1”、“a”、“b”、“y”]
表1

table1

POSITION    NAME     VALUE     CODE
1           Animal   Dog       1
1           Animal   Cat       2
1           Animal   Bird      3
2           Place    USA       1
2           Place    Other     2
3           Color    Red       a
3           Color    Blue      b
3           Color    Orange    c
4           Age      Young     a
4           Age      Middle    b
4           Age      Old       c
5           Alive    Yes       y
5           Alive    No        n
对于数组中的每个元素,我想在
table1
中找到匹配的
POSITION
-
code
组合,其中
POSITION
是元素(基1)的索引,
code
是数组中的元素。然后,我想返回一个散列,其中包含匹配项对应的
名称
,作为键及其值。产出将是:

{"Animal" => "Dog", "Place" => "USA", "Color" => "Red", "Age" => "Middle", "Alive" => "Yes"}

我该怎么做呢?

我假设您要将多个
代码
数组映射到同一个表中。假设您首先将表读入数组:

a = [["1", "Animal", "Dog", "1"],
     ["1", "Animal", "Cat", "2"],
     ["1", "Animal", "Bird", "3"],
     ["2", "Place", "USA", "1"],
     ["2", "Place", "Other", "2"],
     ["3", "Color", "Red", "a"],
     ["3", "Color", "Blue", "b"],
     ["3", "Color", "Orange", "c"],
     ["4", "Age", "Young", "a"],
     ["4", "Age", "Middle", "b"],
     ["4", "Age", "Old", "c"],
     ["5", "Alive", "Yes", "y"],
     ["5", "Alive", "No", "n"]] 

然后你可以这样做:

codes.zip(a.chunk { |a| a.first }).map { |l,(_,b)|
  b.find { |c| c.last == l}[1...-1] }.to_h
  #=> {"Animal"=>"Dog", "Place"=>"USA", "Color"=>"Red",
  #    "Age"=>"Middle", "Alive"=>"Yes"} 
步骤如下:

enum0 = a.chunk { |a| a.first }
  #=> #<Enumerator:
  #   #<Enumerator::Generator:0x007f8d6a0269b8>:each> 
因此
x.zip(y)
的第一个元素被映射到
[“动物”、“狗”]

enum1
的每个其他元素执行相同的操作后,
x.zip(y)
等于:

f = [["Animal", "Dog"], ["Place", "USA"], ["Color","Red"],
     ["Age",  "Middle"], ["Alive", "Yes"]]
最后的步骤是

f.to_h
  #=> {"Animal"=>"Dog", "Place"=>"USA", "Color"=>"Red",
  #    "Age"=>"Middle", "Alive"=>"Yes"}
或对于
Hash[f] 

你的数据库客户端是什么。。请始终提及它。
“b”
为什么映射到“年龄”=>“中间”而不是“颜色”=>“蓝色”?因为b是数组中的第四个字符,它将与标记为位置4的项目匹配。我知道数组包含一个零索引,但这就是给我的表的样子。@sabrams这对你来说是至关重要的。。请在代码中提及。如果表中有近200条记录,而数组中有近25个元素,这是否仍能很好地执行?@sabrams表中有这些数据,对吗?是的,表1中的数据在它自己的表/模型中。数组将是早期代码的输入。如果只有一条记录与表匹配,则查询可能更有效。(我真的不知道——不是我的领域。)这主要是针对您希望在同一个表上匹配多个数组的情况。@sabrams您的Ruby版本是什么?
f = [["Animal", "Dog"], ["Place", "USA"], ["Color","Red"],
     ["Age",  "Middle"], ["Alive", "Yes"]]
f.to_h
  #=> {"Animal"=>"Dog", "Place"=>"USA", "Color"=>"Red",
  #    "Age"=>"Middle", "Alive"=>"Yes"}
Hash[f]