我刚开始学习Ruby!
我有以下字符串:
"Mark Smith, 29"
Run Code Online (Sandbox Code Playgroud)
我想将它转换为哈希,所以它看起来像这样:
{:name=>"Mark", :surname=>"Smith", :age=>29}
Run Code Online (Sandbox Code Playgroud)
我编写了以下代码,以减少输入:
a1 = string.scan(/\w+|\d+/)
Run Code Online (Sandbox Code Playgroud)
现在我有一个字符串数组.是否有一种优雅的方式将其转换为哈希?我知道我可以做三次这样的迭代:
pers = Hash.new
pers[:name] = a1[0]
pers[:surname] = a1[1]
pers[:age] = a1[2]
Run Code Online (Sandbox Code Playgroud)
但也许有办法使用.each方法或类似的东西吗?或者也许可以使用预定义的键定义类Person,(:name, :surname, :age)然后将我的字符串"抛出"到此类的实例中?
是的,你可以这样做,
%i(name surname age)
.zip(string.scan(/\w+|\d+/))
.to_h
# => {:name=>"Mark", :surname=>"Smith", :age=>"29"}
Run Code Online (Sandbox Code Playgroud)
或者,你可以利用Struct,例如:
Person = Struct.new(:name, :surname, :age )
person = Person.new( *string.scan(/\w+|\d+/) )
person.age # => "29"
person.name # => "Mark"
Run Code Online (Sandbox Code Playgroud)