如何解决erb模板中的人偶数组循环
我有以下Yaml:
+(abs(row(diag(n)) - col(diag(n))) == 1)
通过我的班级(用人偶代码)得到以下结果:
# [,1] [,2] [,3] [,4] [,5]
#[1,] 0 1 0 0 0
#[2,] 1 0 1 0 0
#[3,] 0 1 0 1 0
#[4,] 0 0 1 0 1
#[5,] 0 0 0 1 0
我正在编写一个模板,以将数据拆分为多个文件(到目前为止有效)。我被卡在“ title07 ”项目上,如何从此处继续循环?
role::test::logos::filesanddata:
logo01.jpg:
title01: 'value01'
title02: 'value02'
title03: 'value03'
title04: 'value04'
title05: 'value05'
title06: 'value06'
title07:
- title07_01: value07_01
- title07_02: value07_02
- title07_03: value07_03
- title07_04: value07_03
- title07_05: value07_04
logo02.jpg:
title01: 'value01'
解决方法
在数据和ERB中,关于数据的结构似乎都有些混乱。这个YAML ...
title07: - title07_01: value07_01 - title07_02: value07_02 - title07_03: value07_03 - title07_04: value07_03 - title07_05: value07_04
...提供了一个由单键哈希组成的 array 作为主机哈希的'title07'键的值。这不一定是错误的,但非常可疑。相对于将数据设为单个五元素哈希而言,尚不清楚thge数组层应该为您做什么。
请考虑根据该数据结构提出的ERB。在这里...
<% item['title07'].each do |inner_item| -%>
... item['title07']
是单键哈希的数组,因此每个inner_item
都是这些哈希之一。散列中出现的一个密钥因散列而异,这使得这些不必要的操作变得困难。但是,所有键都不是'title07'
,因此会中断:
<%= inner_item['title07']['title07_01'] %>
您需要一些类似的东西
<%= inner_item['title07_01'] %>
,但要考虑到密钥从inner_item
到inner_item
有所不同的事实。如果您真的想尝试使用它,那么使用each_with_index
而不是each
可能会很有用,这样您就可以从数组索引构造所需的哈希键。或者,您可以仅迭代内部哈希以获取值。
但这证明了该数据结构的某些不足之处。假设您改为绕过数组级别将数据结构化为单个多键哈希:
title07:
title07_01: value07_01
title07_02: value07_02
title07_03: value07_03
title07_04: value07_03
title07_05: value07_04
然后遍历条目可能会直接为您提供所需的内容:
<% item['title07'].each do |_,value| -%>
<%= value %>
<% end -%>
或者,由于键具有可计算的形式,因此您可以计算用于检索叶子数据的键:
<% 1...5.each do |i| -%>
<%= item['title07']["title07_0#{i}"] %>
<% end -%>
类似的方法也可以与基于数组的结构一起使用,但是所需的表达式将更加复杂(并且留作练习)。
,我不清楚最终目标是什么,但是希望以下示例可以帮助您解决遇到的问题
给出了以下层次数据:
role::test::logos::filesanddata:
logo01.jpg:
title01: 'value01'
title02: 'value02'
title03: 'value03'
title04: 'value04'
title05: 'value05'
title06: 'value06'
title07:
- title07_01: value07_01
- title07_02: value07_02
- title07_03: value07_03
- title07_04: value07_03
- title07_05: value07_04
logo02.jpg:
title01: 'value01'
以下代码假设filesanddata = lookup('role::test::logos::filesanddata')
<% @filesanddata.each_pair do |file,titles| -%>
<%- titles.each_pair do |title,values| -%>
<%- if values.is_a?(String) -%>
<%= value %>
<%- elsif value.is_a?(Array) -%>
<%# As mentioned by John Bollinger you have an array %>
<%# of hashes so we have to unpack that as well %>
<%- values.each do |value_hash| -%>
<%- value_hash.each_pair do |_,value| -%>
<%= value %>
<%- end -%>
<%- end -%>
<%- end -%>
<%- end -%>
<% end -%>
将创建具有以下内容的文件
value01
value02
value03
value04
value05
value06
value07_01
value07_02
value07_03
value07_03
value07_04
value01
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。