删除数组中的特定元素

时间:2014-12-10 15:10:58

标签: ruby

我想让代码在分数高于文件中的当前值时覆盖现有名称。

该文件如下所示: 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

问题是,数组中的名称和点不是单独的,如果我想改变它,我需要更改我的整个程序。我可以以某种方式在名称上使用通配符或类似的东西,并同时比较得分吗?

我想覆盖已存在且分数较高的特定名称

2 个答案:

答案 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进行字符串插值。