Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails:一种更有效的对象关系数组映射新数组的方法_Ruby On Rails_Ruby_Arrays_Mapping - Fatal编程技术网

Ruby on rails rails:一种更有效的对象关系数组映射新数组的方法

Ruby on rails rails:一种更有效的对象关系数组映射新数组的方法,ruby-on-rails,ruby,arrays,mapping,Ruby On Rails,Ruby,Arrays,Mapping,数组A基本上是一个关系散列,我想取出所有匹配的num或alpha来创建一个单独的数组,即B和C 所以一旦我有了B数组,我就可以立即知道alpha'a'的num:1和2与 C、 我可以立即知道num'1'有alpha a和b A = [{ alpha: 'a', num: '1'}, { alpha: 'b', num: '1'}, { alpha: 'a', num: '2'}, { alpha: 'b', num: '2'}] B = [{alpha:

数组A基本上是一个关系散列,我想取出所有匹配的num或alpha来创建一个单独的数组,即B和C

所以一旦我有了B数组,我就可以立即知道alpha'a'的num:1和2与 C、 我可以立即知道num'1'有alpha a和b

 A = [{ alpha: 'a', num: '1'},
      { alpha: 'b', num: '1'},
      { alpha: 'a', num: '2'},
      { alpha: 'b', num: '2'}]

 B = [{alpha: 'a', num: [1, 2]},
      {alpha: 'b', num: [1, 2]}]

 C = [{num: '1', alpha: [a, b]},
      {num: '2', alpha: [a, b]}]
到目前为止,我有以下几点,但我认为必须有一种更简单、更有效的方法来做到这一点

B = []
C = []

A.each do |datum|
    if !B.any?{|value| value.alpha == datum.alpha}
      temp = {
          alpha: datum.alpha,
          num: (A.map {|value| (value.num == datum.num)? value.num : nil }).compact
      }

      B << temp
    end

    if !C.any?{|value| value.num == datum.num}
      temp = {
          num: datum.num,
          alpha: (A.map {|value| (value.alpha == datum.alpha)? value.alpha : nil }).compact
      }

      C << temp
    end
  end
B=[]
C=[]
A.每个do |基准|
如果!B.any?{| value | value.alpha==datum.alpha}
温度={
alpha:datum.alpha,
num:(A.map{| value |(value.num==datum.num)?value.num:nil}).compact
}
B以下是技巧:

a = [
      { alpha: 'a', num: '1'},
      { alpha: 'b', num: '1'},
      { alpha: 'a', num: '2'},
      { alpha: 'b', num: '2'}
    ]

alpha_arry = a.group_by { |h| h[:alpha] }.map do |key,value| 
  {:alpha => key, :num => value.collect { |num_hash| num_hash[:num] }} 
end
alpha_arry
# => [{:alpha=>"a", :num=>["1", "2"]}, {:alpha=>"b", :num=>["1", "2"]}]
num_arry = a.group_by { |h| h[:num] }.map do |key,value| 
  {:num => key, :alpha => value.collect { |alpha_hash| alpha_hash[:alpha] }} 
end
num_arry
# => [{:num=>"1", :alpha=>["a", "b"]}, {:num=>"2", :alpha=>["a", "b"]}]