加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:57:15 所属栏目:百科 来源:网络整理
导读:我觉得这对某人来说一定是个问题,而我花了很多时间试图找到一个解决方案而找不到我喜欢的解决方案. 我不会试图用语言说出我需要的东西,只是给出一些示例输入和它们的预期输出作为Rspec代码: 方法是: def explode(hash) ...end 规范: describe '#explode'
我觉得这对某人来说一定是个问题,而我花了很多时间试图找到一个解决方案而找不到我喜欢的解决方案.

我不会试图用语言说出我需要的东西,只是给出一些示例输入和它们的预期输出作为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]]

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读