如何替换从数组

时间:2016-03-15 14:28:18

标签: arrays ruby random

我正在尝试从一个数组中取一个字符串,并用另一个数组中的字符串替换它的特定部分。 Bcards_array是第一个数组,我要替换的部分是" _______"使用Wcard_array中的完整元素。 我目前有:

# (the array as a block of text, with each desired element separated by <>)
Wcards_array = Wcards.split("<>") 

在此处找到Wcards_array原始字符串:http://www.cardsagainsthumanity.com/wcards.txt

def random_items(array)
      array.sample(1 + rand(array.count))
    end

Wcard_answer = Wcards_array.sample(1)

Bcard_answer = Bcards_array.sample(1)
Bcard_answer = Bcard_answer.split(" ")
Bcard_answer = Bcard_answer.map! { |element|
   if(element == "__________")
       "#{Wcard_answer}"
   end
}

尽管早些时候在

上使用它,但我目前正在为拆分找回No Method错误

Wcards在评论中链接

3 个答案:

答案 0 :(得分:0)

让我们一步一步地解决这个问题:

Wcard_answer = Wcards_array.sample(1)

Wcards_array是一个数组,你想从中获取一个随机元素并将其存储在Wcard_answer中,大概你会得到一个字符串类。

Bcard_answer = Bcards_array.sample(1)

相同,除了Bcards_array。

Bcard_answer = Bcard_answer.split(" ")

现在你要说你要把答案从Bcards变成一个数组,用空格分割。据推测,Bcard_answer最初看起来像是“测试一个两个_____”。

如果您只想替换所选数组元素中的下划线字符串,则不需要映射循环。这是一个缩短的例子:

rep = '__'
ba = ['Testing __', 'More Testing __']
ws = 'one<>two<>three'
wa = ws.split('<>')

answ = wa.sample
ansb = ba.sample.gsub(rep, wa.sample)

运行几次,我们看到随机结果:

irb(main):007:0> ansb = ba.sample.gsub(rep, wa.sample)
=> "Testing one"
irb(main):008:0> ansb = ba.sample.gsub(rep, wa.sample)
=> "More Testing one"
irb(main):009:0> ansb = ba.sample.gsub(rep, wa.sample)
=> "Testing one"
irb(main):010:0> ansb = ba.sample.gsub(rep, wa.sample)
=> "Testing one"
irb(main):011:0> ansb = ba.sample.gsub(rep, wa.sample)
=> "Testing three"

答案 1 :(得分:0)

尝试这样的事情:

Wcards = 'some<>words<>yes<>no'
Wcards_array = Wcards.split("<>")

Wcard_answer = Wcards_array.sample
Bcards_array = ['1','2','3',"hello mate _____",'5']
Bcards_array.map! { |s| s.include?("_____") ? s.gsub(/_____/,Wcard_answer) : s }

答案 2 :(得分:0)

抱歉,在我发布上一个回答之前,我没有看到您发布的文本文件链接。如果这是你想要做的事情,那么这是你可以修补的东西。

require 'net/http'

bcard_http = 'http://cardsagainsthumanity.com/bcards.txt'
wcard_http = 'http://cardsagainsthumanity.com/wcards.txt'

bcard_array = Net::HTTP.get_response(URI.parse(bcard_http)).body.split('<>')
wcard_array = Net::HTTP.get_response(URI.parse(wcard_http)).body.split('<>')

printf("%s\n", bcard_array.sample.gsub('_' * 10, wcard_array.sample))