Ruby 搜索数组并替换字符串
Ruby Search Array And Replace String
我的问题是,如何在不知道索引数组字符串包含什么的情况下搜索数组并替换搜索的当前索引处的字符串?
下面的代码将搜索互联网上托管的 ajax 文件,它会找到库存,遍历我库存中的每件武器,将 ID 添加到一个字符串中(这样我就可以检查是否之前检查过武器)。然后它会在库存中出现的次数之后添加另一个值,然后在我检查库存中的所有武器后,它将遍历添加到字符串中的所有 ID 并将它们与编号一起显示(出现次数)。这样我就知道我有多少武器了。
这是我所拥有的示例:
strList = ""
inventory.each do |inv|
amount = 1
exists = false
ids = strList.split(',')
ids.each do |ind|
if (inv['id'] == ind.split('/').first) then
exists = true
amount = ind.split('/').first.to_i
amount += 1
ind = "#{inv['id']}/#{amount.to_s}" # This doesn't seem work as expected.
end
end
if (exists == true) then
ids.push("#{inv['id']}/#{amount.to_s}")
strList = ids.join(",")
end
end
strList.split(",").each do |item|
puts "#{item.split('/').first} (#{item.split('/').last})"
end
这是我期望的代码(伪代码)的想法:
inventory = get_inventory()
drawn_inv = ""
loop.inventory do |inv|
if (inv['id'].occurred_before?)
inv['id'].count += 1
end
end loop
loop.inventory do |inv|
drawn_inv.add(inv['id'] + "/" + inv['id'].count)
end loop
loop.drawn_inv do |inv|
puts "#{inv}"
end loop
感谢任何有关如何替换该行的帮助!
编辑:很抱歉不需要关于我的代码的更多信息。我跳过了代码底部不太重要的部分并显示了注释代码而不是实际代码,我现在将其添加。
编辑 #2:我将更新我对它的功能以及我期望的结果的描述。
编辑 #3:添加了伪代码。
提前致谢,
斯特雷兹拉
你想要#each_with_index:http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-each_with_index
您可能还想看看#gsub,因为它需要一个块。您可能根本不需要将此字符串拆分为数组。基本上类似于 strList.gsub(...){ |match| #...your block }
我的问题是,如何在不知道索引数组字符串包含什么的情况下搜索数组并替换搜索的当前索引处的字符串?
下面的代码将搜索互联网上托管的 ajax 文件,它会找到库存,遍历我库存中的每件武器,将 ID 添加到一个字符串中(这样我就可以检查是否之前检查过武器)。然后它会在库存中出现的次数之后添加另一个值,然后在我检查库存中的所有武器后,它将遍历添加到字符串中的所有 ID 并将它们与编号一起显示(出现次数)。这样我就知道我有多少武器了。
这是我所拥有的示例:
strList = ""
inventory.each do |inv|
amount = 1
exists = false
ids = strList.split(',')
ids.each do |ind|
if (inv['id'] == ind.split('/').first) then
exists = true
amount = ind.split('/').first.to_i
amount += 1
ind = "#{inv['id']}/#{amount.to_s}" # This doesn't seem work as expected.
end
end
if (exists == true) then
ids.push("#{inv['id']}/#{amount.to_s}")
strList = ids.join(",")
end
end
strList.split(",").each do |item|
puts "#{item.split('/').first} (#{item.split('/').last})"
end
这是我期望的代码(伪代码)的想法:
inventory = get_inventory()
drawn_inv = ""
loop.inventory do |inv|
if (inv['id'].occurred_before?)
inv['id'].count += 1
end
end loop
loop.inventory do |inv|
drawn_inv.add(inv['id'] + "/" + inv['id'].count)
end loop
loop.drawn_inv do |inv|
puts "#{inv}"
end loop
感谢任何有关如何替换该行的帮助!
编辑:很抱歉不需要关于我的代码的更多信息。我跳过了代码底部不太重要的部分并显示了注释代码而不是实际代码,我现在将其添加。
编辑 #2:我将更新我对它的功能以及我期望的结果的描述。
编辑 #3:添加了伪代码。
提前致谢, 斯特雷兹拉
你想要#each_with_index:http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-each_with_index
您可能还想看看#gsub,因为它需要一个块。您可能根本不需要将此字符串拆分为数组。基本上类似于 strList.gsub(...){ |match| #...your block }