Ruby / yaml 从 assoc 数组中删除元素
Ruby / yaml delete element from assoc array
大家好,我在 yml 中有数组
menu:
primary:
name: General menu
-
text: Home
addr: index.html
-
text: Contact
addr: contact.html
我有菜单(我创建了变量菜单,因为当我只使用 print ... element['text']... 我从 php 得到类似 var_dump 的东西不仅文本 "Start") 我想删除 foreach 之前的 'name' 元素,但它不起作用:
name = $data['name'][name]['name'] # i need this variable later
$data['menu'][name].delete('name') # it doesnt work
menu = "<ul>"
$data['menu'][name].each do |element|
menu << "<li><a href=\"#{element['addr']}\">#{element['text']}</a></li>"
end
menu << "</ul>"
print menu
我的错误是
did not find expected key while parsing a block mapping at...
所以函数 delete 在这里不起作用,我的问题是,如何从这个数组中删除 "name" 元素?为什么
print "<li><a href=\"#{element['addr']}\">#{element['text']}</a></li>"
不起作用?
感谢您的帮助:-)
您的 YAML 无效,因为数组必须与键相关联。你可能想使用类似的东西:
menu:
primary:
name: General menu
items:
-
text: Home
addr: index.html
-
text: Contact
addr: contact.html
此外,请摆脱 PHP 在变量前加上 $ 的做法。在 ruby 中,这使得变量成为全局变量,应尽可能避免使用它们。
以下说明了您想要的操作:
data = YAML.load <<YAML
menu:
primary:
name: General menu
items:
-
text: Home
addr: index.html
-
text: Contact
addr: contact.html
YAML
=> data
{"menu"=>{"primary"=>{"name"=>"General menu", "items"=>[{"text"=>"Home", "addr"=>"index.html"}, {"text"=>"Contact", "addr"=>"contact.html"}]}}}
=> data['menu']['primary'].delete('name')
"General menu"
=> data
{"menu"=>{"primary"=>{"items"=>[{"text"=>"Home", "addr"=>"index.html"}, {"text"=>"Contact", "addr"=>"contact.html"}]}}}
您的 HTML 生成器也应该按如下方式工作:
menu = "<ul>"
data['menu']['primary']['items'].each do |element|
menu << "<li><a href=\"#{element['addr']}\">#{element['text']}</a></li>"
end
menu << "</ul>"
大家好,我在 yml 中有数组
menu:
primary:
name: General menu
-
text: Home
addr: index.html
-
text: Contact
addr: contact.html
我有菜单(我创建了变量菜单,因为当我只使用 print ... element['text']... 我从 php 得到类似 var_dump 的东西不仅文本 "Start") 我想删除 foreach 之前的 'name' 元素,但它不起作用:
name = $data['name'][name]['name'] # i need this variable later
$data['menu'][name].delete('name') # it doesnt work
menu = "<ul>"
$data['menu'][name].each do |element|
menu << "<li><a href=\"#{element['addr']}\">#{element['text']}</a></li>"
end
menu << "</ul>"
print menu
我的错误是
did not find expected key while parsing a block mapping at...
所以函数 delete 在这里不起作用,我的问题是,如何从这个数组中删除 "name" 元素?为什么
print "<li><a href=\"#{element['addr']}\">#{element['text']}</a></li>"
不起作用?
感谢您的帮助:-)
您的 YAML 无效,因为数组必须与键相关联。你可能想使用类似的东西:
menu:
primary:
name: General menu
items:
-
text: Home
addr: index.html
-
text: Contact
addr: contact.html
此外,请摆脱 PHP 在变量前加上 $ 的做法。在 ruby 中,这使得变量成为全局变量,应尽可能避免使用它们。
以下说明了您想要的操作:
data = YAML.load <<YAML
menu:
primary:
name: General menu
items:
-
text: Home
addr: index.html
-
text: Contact
addr: contact.html
YAML
=> data
{"menu"=>{"primary"=>{"name"=>"General menu", "items"=>[{"text"=>"Home", "addr"=>"index.html"}, {"text"=>"Contact", "addr"=>"contact.html"}]}}}
=> data['menu']['primary'].delete('name')
"General menu"
=> data
{"menu"=>{"primary"=>{"items"=>[{"text"=>"Home", "addr"=>"index.html"}, {"text"=>"Contact", "addr"=>"contact.html"}]}}}
您的 HTML 生成器也应该按如下方式工作:
menu = "<ul>"
data['menu']['primary']['items'].each do |element|
menu << "<li><a href=\"#{element['addr']}\">#{element['text']}</a></li>"
end
menu << "</ul>"