ruby是条件、何时使用实例变量以及通过解析的xml循环而不是存储为散列的效率的简写
我正在学习ruby,对我为新手挑战编写的一些代码有一些疑问。挑战的目的是从xml文档中找到人口最多的国家 我在下面包含了我的代码。我的问题是:ruby是条件、何时使用实例变量以及通过解析的xml循环而不是存储为散列的效率的简写,ruby,Ruby,我正在学习ruby,对我为新手挑战编写的一些代码有一些疑问。挑战的目的是从xml文档中找到人口最多的国家 我在下面包含了我的代码。我的问题是: 有没有办法避免初始化@max\u pop变量(@max\u pop=0) 是否有将整个条件块合并为一行的缩写 我是否必须使用实例变量@max\u pop,@max\u pop\u country?没有他们就有错误 哪一个更有效: 在每个国家/地区循环,检查是否pop>max\u pop(以下代码中的方法) 创建pop散列(pop[:country]),然
@max\u pop
变量(@max\u pop=0
)@max\u pop
,@max\u pop\u country
?没有他们就有错误李>
pop>max\u pop
(以下代码中的方法)pop[:country]
),然后查找pop最高的国家@max_pop=0
doc.elements.each("cia/country") do |country|
if country.attributes["population"].to_i > @max_pop
@max_pop=country.attributes["population"].to_i
@max_pop_country=country.attributes["name"]
end
end
puts "country with largest pop is #{@max_pop_country} with pop of #{@max_pop}
我不熟悉rexml,但您应该能够将所有内容简化为以下内容:
max_pop_elem = doc.elements.enum_for(:each, "cia/country").max_by { |c| c.attributes["population"].to_i }
max_pop_country = max_pop_elem.attributes["name"]
max_pop = max_pop_elem.attributes["population"].to_i
key,value=hash.max_by{k,v}
一般来说,如果您打算迭代一些东西,您应该了解Ruby的模块。我为它做了一个参考表。如果rexml正确支持枚举数,您可以通过…执行
doc.elements.each(“cia/country”).max\u,但您应该先尝试上面的代码。hash.max
不会返回max键,而不是值吗?啊,你修好了。哦,是的。我以为我事先测试过了,因为我的测试是错误的。我现在修复了它。给我们看一个XML示例,我们可能会简化它很多。否则,获取一个数组数组,其中包含国家名称和人口,然后使用或来计算它。