微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby – 将数组和/或标量的散列转换为标量组合数组的数组

我觉得这对某人来说一定是个问题,而我花了很多时间试图找到一个解决方案而找不到我喜欢的解决方案.

我不会试图用语言说出我需要的东西,只是给出一些示例输入和它们的预期输出作为Rspec代码

方法是:

def explode(hash)
  ...
end

规范:

describe '#explode' do
  it do
    expect(explode({:a => 1,:b => 2})).
      to eq [[:a,1,:b,2]]
  end

  it do
    expect(explode({:a => 1,:b => [2,3,4]})).
      to eq [
        [:a,2],[:a,3],4]
      ]
  end

  it do
    expect(explode({:a => [1,:b => [3,2,4],4]
      ]
  end

  it do
    expect(explode({:a => 1,:c => [4,5,6]})).
      to eq [
        [:a,:c,5],6],6]
      ]
  end
end

Ruby以外的语言解决方案也受到欢迎.

解决方法

Array#product似乎很适合这里.

h1 = {:a => 1,:b => 2}
h2 = {:a => 1,4]}
h3 = {:a => [1,4]}
h4 = {:a => 1,6]}

def explode hash
  a,*b = hash.transform_values { |v| [*v] }.values.unshift
  a.product(*b).map { |ar| hash.keys.zip(ar).flatten }.sort_by(&:last)
end

p explode h1  
 #[[:a,2]]
p explode h2
 #[[:a,# [:a,4]]

p explode h3
 #[[:a,4]]

p explode h4
 #[[:a,6]]

为了我的工作方法,我不得不重新映射值,所以它们都是数组,这是不理想的.但我仍然发布这个答案,因为它可能会给你或其他人一个起点.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐