1

假设我有一个字符串,例如

"@a ipsum lorem @b dolor sit amet @c consectetur adipisicing"

我想转换为数组(或哈希,或某种键和值模式)

{ @a => "ipsum lorem", @b => "dolor sit amet", @c => "consectetur adipisicing" }

这是可能的,如果可以,怎么做?

一些重要的点:

  • 键是一个已知的值列表,这些值不太可能与字符串中的其他单词发生冲突。
  • 键用符号指定@
  • 键可能比一个字符长,例如@key、@longer-key。
  • 我正在使用 Ruby 1.9.3 在 Rails 3.2 中工作。
4

4 回答 4

4
s = "@a ipsum lorem @b dolor sit amet @c consectetur adipisicing"
Hash[s.split(" ").slice_before(/@/).map{|k,*v|[k,v.join(" ")]}]
#=> {"@a"=>"ipsum lorem", "@b"=>"dolor sit amet", "@c"=>"consectetur adipisicing"}
于 2013-05-18T08:39:27.333 回答
3
Hash[s.scan(/\@\w+/).zip s.split(/\s?\@\w+\s/).drop(1)]
于 2013-05-18T11:17:37.110 回答
1
 s = "@a ipsum lorem @b dolor sit amet @c consectetur adipisicing"
 hs = {}
 s.split('@').drop(1).each{|val| tmp = val.split(' '); hs["@#{tmp.shift}"] = tmp.join(' ')   }
 # puts hs
 #=>{"@a"=>"ipsum lorem", "@b"=>"dolor sit amet", "@c"=>"consectetur adipisicing"}
于 2013-05-18T08:40:31.687 回答
0
Hash[
  string
  .scan(/(@\S+)\s+(.+?)(?=\s+@|\z)/)
  .map{|k, v| [instance_variable_get(k), v]}
]
于 2013-05-18T08:40:19.613 回答