如何在数组之前输入整数值,基于行+列值?

时间:2014-02-16 22:48:22

标签: arrays ruby input

对于以下项目,我应该采用以下格式输入:R1C5 + 2,将其读作“在表中,第1行第5列,添加2.或者以这种格式:R1C2C3-5,其中读取:“在表格中,第1行第2-3列,减去5.这假设表格中的所有数字最初都是0。

我离开的地方:

我无法找到检测“+”或“ - ”的方法来添加/减去表中的值。此外,在提供两个C或R时允许多次添加的范围。例如:R1R5C2C3 + 2(行范围1 - 5,列范围2 - 3,添加2)。

以下是代码:

puts 'Please input: '
x = gets.chomp

col = []
row = []

x.chars.each_slice(2) { |u|  u[0] == "R" ? row << u[1] : col << u[1] }

p col
p row

puts "Largest # in Row array: #{row.max}"
puts "Largest # in Columns array: #{col.max}" #must be in "" to return value

big_row = row.max.to_i
big_col = col.max.to_i


table = Array.new (big_row) { Array.new(big_col) }

1 个答案:

答案 0 :(得分:0)

您正在寻找的方法是=~运算符。如果你在字符串上使用它并给它一个正则表达式模式,它将返回该字符串中该模式的位置。因此:

x = 'R1C2C3-5'

x =~ /R/

返回:0,因为那是字符串中'R'的位置(就像数组0,1,2 ......一样计算)。

如果您不熟悉regexp和=~运算符,我建议您查看Ruby文档,它非常有价值。基本上正斜杠之间的模式匹配。您希望匹配+-,但它们在regexp中具有特殊含义,因此您必须使用反斜杠转义它们。

x =~ /\+/
x =~ /\-/

但您可以将它们组合成一个带有OR符号(管道)|

的模式匹配器
x =~ /\+|\-/

所以现在你有了一个方法来获得运营商:

def operator(my_string)
  r = my_string.slice(my_string =~ /\+|\-/)
end

我还会使用运算符将​​字符串拆分为列/行部分和数字部分:

op = operator(x)    # which returns op = '-'
arr = x.split(my_string(x))  # which returns an array of two strings ['R1C2C3', '5']

我将进一步的字符串操作留给您。我将在String类上阅读这个页面:Ruby String Class,这在数组:Ruby Array Class上,因为Ruby包含了很多方法来使这样的事情变得更容易。我学会用Ruby做的一件事是想“我想这样做,我想知道是否已经有一个内置的方法来做这个?”我去检查文档。使用Rails更是如此!