我试图在以下映射函数中避免IF:
X Y
1 11
2 10
3 9
4 8
5 7
6 6
7 5
8 4
9 3
10 2
11 1
12 12
基本上是Y = (12 - X)
,除了X = 12
。在这种情况下,Y = 12
。
Y
矢量是偏移了一个位置的X
矢量的反向。有没有一种方法可以使用min
和max
或类似的东西来编写这个函数,以避免条件?
- 我不喜欢这里的任何编程语言
y = 12 - x%12;
适用于从1到12(含)的所有x
。%
是C型模算子,给出x
除以12的余数。如果x
是12,则为零,对于1到11,则为x
。
Ruby答案:
x = (1..12).to_a
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
y = x.map{|n| 12 - n % 12}
#=> [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 12]
这可以通过使用n.max
而不是12
来扩展到任何长度。