我喜欢解析字符串数组并更新值,例如:
list= ["beam=0", "active=0", "rate=11", "version=4.1", "delay=5"]
在上面的列表中,我想搜索“active”并编辑它的值,比如如果“active=0”,我想使它“active=1”,如果它的“active=1”,我想使它“active=0”。
What i am doing is , but its not correct ,, can someone assist in this:
list.each do |lists|
if lists.include?("active=0")
lists = "active=1"
elsif list.include?("active=1")
lists = "active=0"
end
end
如果列表包含active=0,那么输出列表= [“beam=0”,“active=1”,“rate=11”,“version=4.1”,“delay=5”],如果列表包含active=1,那么输出列表= [“beam=0”,“active=0”,“rate=11”,“version=4.1”,“delay=5”],最后我期望的是什么
3条答案
按热度按时间wnavrhmk1#
如果可以使用散列,则更适合此任务。
如果不能,那么代码的问题就在于没有更新原始值,而只是更新了
#each
迭代器中使用的变量。一种方法是这样的:
如果出于某种原因,你希望尽可能地接近你的原始代码,那么你可以使用map而不是each。我不推荐在这种情况下使用下面的代码,因为这不是一个好的编码,但是如果你有你的理由,这只是为了教育目的:
hfwmuf9z2#
您可以迭代
list
并替换active=
后面的数字,如下所示:ffvjumwh3#
实际上,我会建议一种完全不同的方法;但是,您的原始代码的主要问题是您在开始时使用了不适当的方法。
each
没有返回修改过的数组。请尝试使用map
。至少,您还需要添加一行代码以确保所有其他元素都返回未更改的数组。如果您不这样做,其他元素将被替换为nil
值。下面是经过最小修改的代码: