如何根据第三个变量值将2个变量设置为1或0

时间:2011-06-13 16:32:58

标签: ruby

我有一个具有以下值的变量:

blah = # 1, 0, or -1

现在我想设置这两个变量:

up

down

根据'blah'的值,为1或0。

如果blah为1,则up = 1且down = 0,如果blah为-1,则down = 1且up = 0

如果blah为0,则两者都为0.

如果检查这么多的红宝石怎么办呢?

8 个答案:

答案 0 :(得分:9)

解决方案1 ​​

up, down =
case blah
when 1; [1, 0]
when 0; [0, 0]
when -1; [0, 1]
end

解决方案2(灵感来自mu太短)

up, down = [[0, 0], [1, 0], [0, 1]][blah]

答案 1 :(得分:3)

sawa和SirDarius的变体允许blah大于,小于或等于零,而不仅仅是-1,0或1:

def mapper(x)
    h = {
        -1 => [0, 1],
         0 => [0, 0],
         1 => [1, 0]
    }
    h[x <=> 0]
end

up, down = mapper(blah)

请注意,Fixnum's <=> operator被指定为返回-1,0或1(当然还是nil):

  

返回-1,0,+ 1或nil,具体取决于fix是否小于,等于或大于numeric。

因此,使用<=>是一种安全的方法来实现Fixnum的signum function

答案 2 :(得分:2)

根据您的初始规范,以下代码有效:

up = 0
down = -blah

编辑:

以下是使用哈希获得所需结果的创造性方法:

states = { -1 => [0,1], 0 => [0,0], 1 => [1,0] }
up, down = states[blah]

答案 3 :(得分:2)

up = blah == 1 ? 1 : 0
down = blah == -1 ? 1 : 0

答案 4 :(得分:1)

我不认为这是特定于红宝石的...类似

up = blah != -1
down = blah != 1

我认为你的意思是当blah为1时,up应为1。

答案 5 :(得分:1)

另一种方法:

up, down = [0, blah].max, [0, -blah].max

答案 6 :(得分:0)

将两个答案重置为0,然后根据需要进行调整

up, down = 0, 0
up = 1 if blah > 0
down = 1 if blah < 0

答案 7 :(得分:0)

class Integer
  def up?
    self == 1
  end

  def down?
    self == -1
  end
end

x = 1
x.up? # => true