Ruby 删除数组中的特定元素

Ruby 删除数组中的特定元素,ruby,Ruby,我想让代码在分数高于文件中当前的分数时覆盖现有名称 该文件如下所示: 代码如下: 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 +

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

该文件如下所示: 代码如下:

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
问题是,数组中的名称和点不是分开的,如果我想更改,我需要更改整个程序。我可以在名字上使用通配符或类似的东西,同时比较分数吗


我想覆盖一个已经存在且分数更高的特定名称,我认为如果将数据移动到散列而不是数组中,程序将更有效率

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
@bestellite.split(“,”)
如果@bestEnlist[0]==名称

如果@bestEngliste[1],那么您想使用正则表达式在数组中搜索,并在找到特定索引时替换它吗?查看文章,了解如何使用正则表达式搜索数组。我认为你应该能够利用姆拉登·贾布拉诺维奇的答案。您可以阅读如何使用Ruby String的=~regex matcher

我认为你可以通过

x = @Bestenliste.index{|e| e =~ /#{Regexp.quote(name)}.*/ }
unless x.nil?
  @Bestenliste.delete_at(x)
end
@Bestenliste = @Bestenliste +  [name.to_s + "," + score.to_s]

我曾经创建和测试正则表达式,以及字符串插值。

您的问题不清楚。什么是示例输入?期望的输出是什么?知道电流输出是什么也很好。如果我读对了代码,我认为
include
和相关语句不起作用,因为您只按
name
搜索,而不是按
name.to_s+,“+score.to_s
搜索。但是,如果不知道您想要得到什么结果,就很难回答。当程序已经存在并且分数更高时,它应该覆盖这些名称,但是它不起作用,因为数组中的名称和分数没有分开。数组看起来是这样的:
[“nico,6\n”,“henrik,9\n”,“luis,2\n”]
新行的出现是因为从文件中加载了数组。感谢您的回答,老实说,我以前从未使用过哈希,所以我只使用了一个数组。我应该读一点书,这样我就能做到。谢谢你的提示!一旦你得到了它们,它们会非常有帮助。祝你好运谢谢你的回答,在我第一次尝试之后,它只是将分数写在空的highscore.txt中。第二次尝试后,它说,
ln38:in'*':参数数目错误
这是一行:
x=@bestEnste.index{e | e=~/{Regexp.quote(name)。*}/}
哦,我的正则表达式出错了!我在测试后加入了插值。
*
需要位于}的外部,因此它应该看起来像
/{Regexp.quote(name)}.*/
。我将编辑我的答案以反映这一点。好的,现在它在“highscore”中显示
35:nil:NilClass的未定义方法“delete_at”
我现在破坏了数组了吗?嗯,你刚才复制粘贴了我的代码了吗?因为我想问题是我打错了。您可以看到,我无意中在除非语句中写入了
bentEnlist.delete_at
,而不是
bestEnlist.delete_at
。所以Ruby试图访问数组
BentEnlist
,正如错误代码所示,它是
nil
。修正打字错误可以解决这个问题。如果你花时间阅读错误信息,它会非常有用!它们并不像最初看起来那么难理解。