我想让代码在分数高于文件中的当前值时覆盖现有名称。
该文件如下所示: http://i.stack.imgur.com/LuQwp.png 这是代码:
def highscore(name,score)
a = File.new("highscore.txt", "w")
if @Bestenliste.include?("#{name}")
x = @Bestenliste.index("#{name}")
@Bestenliste.delete_at(x)
end
@Bestenliste = @Bestenliste + [name.to_s + "," + score.to_s]
a.puts @Bestenliste
a.close
end
问题是,数组中的名称和点不是单独的,如果我想改变它,我需要更改我的整个程序。我可以以某种方式在名称上使用通配符或类似的东西,并同时比较得分吗?
我想覆盖已存在且分数较高的特定名称
答案 0 :(得分:1)
我认为如果将数据移动到散列而不是数组,那么您的程序将更有效。
array.each {|set| set.split(",")}
array=array.to_h
然后您可以轻松地比较值并替换。
if num > array[name]
array[name]=num
end
据我所知,替代方案是您在比较时拆分值。我实际上并没有在你的程序中看到任何比较。像
这样的东西@Bestenlite.split(",")
if @Bestenliste[0]==name
if @Bestenliste[1].to_i<score
类似的东西,但这会使你的代码变得非常复杂。
答案 1 :(得分:0)
所以你想使用正则表达式来搜索你的数组并找到一个特定的索引?查看this帖子,了解如何使用正则表达式搜索数组。我想你应该能够在那里使用MladenJablanović的答案。您可以阅读有关如何使用Ruby String的= ~regex matcher here。
的信息我认为你可以通过
完成它x = @Bestenliste.index{|e| e =~ /#{Regexp.quote(name)}.*/ }
unless x.nil?
@Bestenliste.delete_at(x)
end
@Bestenliste = @Bestenliste + [name.to_s + "," + score.to_s]
我使用this来创建和测试正则表达式,并使用this stackoverflow post进行字符串插值。