当为数组的每个元素(Ruby)分配一个新值时,.each on array被重写

时间:2016-01-18 21:31:23

标签: arrays ruby

我有一个小程序

puts "enter segments: "
entry = gets.chomp.split


entry.each do |value|
    @new_values = []
    if value == "0"
        value = 2
        @new_values << value
    elsif value == "1"
        value = 3
        @new_values << value
    elsif value == "2"
        value = 1
        @new_values << value
    elsif value == "3"
        value = 2
        @new_values << value
    elsif value == "4"
        value = 3
        @new_values << value
    elsif value == "5"
        value = 2
        @new_values << value
    elsif value == "6"
        value = 3
        @new_values << value
    elsif value == "7"
        value = 3
        @new_values << value
    end
end

print @new_values

此程序接受用户输入,将其拆分为空格,然后运行并指定一个整数值来替换当前字符串。

我遇到的问题是,每次数组的新元素通过时,value = variable都会被覆盖。如何设置它以便重新分配所有值并将其输入@new_values数组?

2 个答案:

答案 0 :(得分:4)

正如@MladenJablanović建议的那样,你需要将@new_values = []移到你的循环之外。

@new_values = []
entry.each do |value|
    ...

答案 1 :(得分:3)

我知道那里已经有了一个已经接受的答案,但是如果对你的大块if else块进行一点点清理呢?

puts "enter segments: "
entry = gets.chomp.split

@dict = [2,3,1,2,3,2,3,3]
new_values = entry.map do |value|
  @dict[value.to_i]
end

print new_values