Ruby - 用所有非空白字符替换所有数组元素中的空格

时间:2014-08-11 15:38:35

标签: ruby arrays regex string gsub

我99%肯定以前没有问过这个问题,所以就这么说了。

假设我们有一个字符串数组

strings = ['first string', 'second string', 'third string']

我想创建一个新的海量数组,用三个非空白字符(字母,数字,符号)代替三个元素中的空格字符

它看起来像这样。

new_array = ['firstastring', 'secondastring', 'thirdastring', 'firstbstring', .. 
'first1string', 'seond1string', .. 'third^string', ...]

新数组的计数应该是原始数组中的元素数(3)乘以Ruby中的非空白字符数

一个可能的解决方案是

new_array = []
/[\S]/.each do |character|
  strings.each do |string|
    new_array.gsub(string, character)
  end
end

我在正则表达式中理解\ S表达式指的是任何非空白字符,所以我认为这是最好用的。

我仍然是Ruby的初学者,所以我感谢任何帮助。

根据我对Ruby的理解,解决方案很可能涉及每个循环。

更新 对不起,看起来你不能在正则表达式类上调用每个方法。我有另一个想法。

characters_array = (0..9).to_a.map(&:to_s) + ('a'..'z').to_a + ('A'..'Z').to_a + 
["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "+", "=", "`", "~", 
":", ";", ",", ".", "?", "/"]

new_array = []
characters_array.each do |character|
  strings.each do |string|
    new_array.gsub(string, character)
  end
end

这只是一个想法。

2 个答案:

答案 0 :(得分:1)

这就是你如何做到的:

strings = ['first string', 'second string', 'third str ing']
subs = %w[0 a ^]
  #=> ["0", "a", "^"]

strings.product(subs).map { |e,c| e.gsub(/\s/,c) }
  #=> ["first0string", "firstastring", "first^string",
  #    "second0string", "secondastring", "second^string",
  #    "third0str0ing", "thirdastraing", "third^str^ing"]

subs.product(strings).map { |c,e| e.gsub(/\s/,c) }
 #=> ["first0string", "second0string", "third0str0ing",
 #   "firstastring", "secondastring", "thirdastraing",
 #   "first^string", "second^string", "third^str^ing"]

取决于您喜欢的顺序。

答案 1 :(得分:1)

您可以使用mapflat_map来获取数组:

new_array = characters_array.flat_map do |character|
  strings.map do |string|
    string.gsub(' ', character)
  end
end