Ruby on rails Ruby:如何迭代散列并根据项目的数量做一些不同的事情?
我正在处理一个如下所示的哈希:Ruby on rails Ruby:如何迭代散列并根据项目的数量做一些不同的事情?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在处理一个如下所示的哈希: h = { "side1"=>["green", "Green"], "side2"=>["verde", "Verde"] } h = { "side1"=>["green", "Green"], "side2"=>["verde", "Verde"] } h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ') # "side1 fro
h = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
h = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ')
# "side1 from green to Green and side2 from verde to Verde"
h = {
"side2"=>["verde", "Verde"]
}
h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ')
# side2 from verde to Verde"
但是,其中可能只有一项:
h = {
"side2"=>["verde", "Verde"]
}
我想输出散列,使其看起来像这样:
h = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
h = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ')
# "side1 from green to Green and side2 from verde to Verde"
h = {
"side2"=>["verde", "Verde"]
}
h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ')
# side2 from verde to Verde"
用户将side1从绿色更改为绿色,将side2从verde更改为绿色
当有两个项目时,将从“和”中分离。否则它将如下所示:
h = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
h = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ')
# "side1 from green to Green and side2 from verde to Verde"
h = {
"side2"=>["verde", "Verde"]
}
h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ')
# side2 from verde to Verde"
用户将side2从verde更改为verde
这一切都发生在我的rails视图脚本中。我如何编写代码才能做到这一点?您可以这样做:
h = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
h = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ')
# "side1 from green to Green and side2 from verde to Verde"
h = {
"side2"=>["verde", "Verde"]
}
h.map { |k,v| "#{k} from #{v[0]} to #{v[1]}" }.join(' and ')
# side2 from verde to Verde"
因此,雇员再培训局认为:
用户已更改。
如果您经常做这种事情,那么您可能需要为它构建一个助手
由于您在Rails中,因此也可以使用:
用户已更改。
to_句子
方法也可以更好地扩展到两个以上的元素。因此,如果您还有“side3”=>[“pancakes”,“pancakes”]
,那么您将得到:
用户将side1从绿色更改为绿色,side2从verde更改为verde,side3从煎饼更改为煎饼。
这里有一个可能的解决方案:
hash = {
"side1"=>["green", "Green"],
"side2"=>["verde", "Verde"]
}
result = hash.map do |key,value|
"#{key} from #{value.first} to #{value.last}"
end
puts "User changed #{result.to_sentence}"
输出将是:
User changed side1 from green to Green and side2 from verde to Verde
而如果仅添加了一项:
User changed side1 from green to Green
+1对于to_句,我不知道这样的事情也存在。Rails提供了您所需的一切:)