这是我从给定索引向前循环的功能。我正在寻找一种行为,从1变为2,再从3变为4,然后回到1,然后重复。
def forward(letter)
arr = ['a', 'b', 'c', 'd']
if arr.find_index(letter) < 3
arr[arr.find_index(letter) + 1]
elsif arr.find_index(letter) == 3
arr[0]
end
end
forward('d') # => 'a'
forward('b') # => 'c'
而且我有对方可以向后循环。
有更好的方法吗?
答案 0 :(得分:4)
可以使用散列代替每次搜索数组:
RuntimeException
RuntimeException
invert
哈希向后移动:
def forward(letter)
{'a'=>'b', 'b'=>'c', 'c'=>'d', 'd'=>'a'}[letter]
end
forward('d') #=> "a"
forward('b') #=> "c"
答案 1 :(得分:2)
def forward(letter)
arr = ['a','b','c','d']
i = arr.find_index(letter)
arr[(i + 1) % arr.length]
end
答案 2 :(得分:1)
执行此操作的另一种方法是使用循环枚举器和循环。
def forward letter
enum = ['a', 'b', 'c', 'd'].cycle
loop {
n = enum.next
break enum.peek if n == letter
}
end
forward 'a' #=> 'b'
forward 'b' #=> 'c'
forward 'c' #=> 'd'
forward 'd' #=> 'a'
答案 3 :(得分:0)
喜欢吗?
def forward(number)
arr = [1, 2, 3, 4]
return arr[number % arr.size]
end