如果对象不是',是否有一种Ruby习惯用法用于将其封装在数组中;还没有?
我正在使用一个外部API来交换XML消息。因此,我使用了大量来自xml的如果对象不是',是否有一种Ruby习惯用法用于将其封装在数组中;还没有?,ruby,xml,arrays,hash,Ruby,Xml,Arrays,Hash,我正在使用一个外部API来交换XML消息。因此,我使用了大量来自xml的散列 但是,#from_xml仅对数组中的重复元素进行编码。这是有道理的,但当我试图循环通过一个只出现一次的可重复元素时,它就会中断。例如: <Stuff> <SKU>ABC-123</SKU> <SKU>DEF-456</SKU> <SKU>XYZ-789</SKU> </Stuff> 将包含3个SKU,因此我可以
散列
但是,#from_xml
仅对数组中的重复元素进行编码。这是有道理的,但当我试图循环通过一个只出现一次的可重复元素时,它就会中断。例如:
<Stuff>
<SKU>ABC-123</SKU>
<SKU>DEF-456</SKU>
<SKU>XYZ-789</SKU>
</Stuff>
将包含3个SKU,因此我可以执行以下操作:
my_hash["Stuff"].each do |sku|
# process the sku
end
但它在使用此XML时失败:
<Stuff>
<SKU>XYZ-789</SKU>
</Stuff>
有更干净的方法吗?只需将其包装成一个数组并展平:
array_of_one_or_many = [my_hash['SKU']].flatten
如果它已经是一个数组,它将打开它并使它成为一个普通数组。这两种情况都适用。当我过去遇到这种情况时,我使用
foo = ([] << bar).flatten
foo=([]您可以使用Array()
array_of_one_or_many = [my_hash['SKU']].flatten
foo = ([] << bar).flatten
irb(main):012:0> Array(1)
=> [1]
irb(main):013:0> Array([1])
=> [1]