【问题标题】:Ruby: adding to hash/ merging objects from YAMLRuby:从 YAML 添加到哈希/合并对象
【发布时间】:2014-09-29 19:52:04
【问题描述】:

我有两个已序列化的 YAML 文件。

“PP”来自

ἀγαπάω:
  present: ἀγαπάω
  future: ἀγαπήσω
  aorist: ἠγάπησα

...还有很多...

“词位”来自

ἀγαπάω:
    pos: V
    bdag-headword: ἀγαπάω
    strongs: 25
    gloss: I love
...many more...

我正在尝试将“gloss”和“strongs”的值添加到“pp”,或者将 pp 值与这些来自词位的新值合并。显然,ruby 不允许在迭代哈希时插入新值。到目前为止,我有:

pps = Hash.new
pp.each do |p|
lexemes.each do |lex, arr| 
  if lex.match /^#{p[0]}$/
    #match found
    puts "p #{p[0]} ... lex #{lex}...#{arr['strongs']}....#{arr['gloss']} .
  (pps[p[0]] ||= []) << p
  pps[p[0]].push(:strongs => arr['strongs'], :gloss => arr['gloss'])
  end
end
end

当被倾销时会产生:

"ἀγαπάω":
- - "ἀγαπάω"
  - present: "ἀγαπάω"
    future: "ἀγαπήσω"
    aorist: "ἠγάπησα"
- :strongs: 25
  :gloss: I love

当我真正想要的时候:

ἀγαπάω:
  present: ἀγαπάω
  future: ἀγαπήσω
  aorist: ἠγάπησα
  strongs: 25
  gloss: I love

知道我应该在哪里/如何管理新数据的插入吗?

谢谢!

【问题讨论】:

    标签: ruby hash yaml


    【解决方案1】:

    ||= [] 这个构造是Array 的初始化,尽量避免它。合并两个Hashes 只需使用#merge 方法:

    h1 = { h1: { hh1: 1, hh2: 2}}
    # => {:h1=>{:hh1=>1, :hh2=>2}}
    h2 = { h1: { hh3: 3, hh4: 4}}
    # => {:h1=>{:hh3=>3, :hh4=>4}}
    h1[:h1].merge(h2[:h1])
    # => {:hh1=>1, :hh2=>2, :hh3=>3, :hh4=>4}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 2012-01-14
      • 2019-02-21
      • 2019-08-08
      相关资源
      最近更新 更多