У меня есть ссылочный хэш всех возможных рангов, которая выглядит так:Определите, существуют ли соседи?
hash = {
bronze: 0,
silver: 1,
gold: 2,
platinum: 3,
diamond: 4
}
Я получаю данное звание, и целый ряд других существующих рангов, и мне нужно, чтобы определить, существует ли "соседи для данного ранг. Постараюсь пример:
given_rank = 'gold'
existing_ranks = ['silver', 'platinum']
Это должно вернуть true
- серебро непосредственно под золото и платина непосредственно выше - как соседи присутствуют.
given_rank = 'gold'
existing_ranks = ['silver', 'diamond']
Это должно вернуть false
- платина отсутствует на верхней стороне
Вот что я сейчас:
user_rank = hash[given_rank]
higher = hash.invert[user_rank + 1]
lower = hash.invert[user_rank - 1]
if existing_ranks.include?(higher) && existing_ranks.include?(lower)
# do something
else
# do another thing
end
Есть более эффективный/эффективный/рубиновый способ решить эту проблему ?
Вы имеете в виду '(n2 - n1) .abs == 2'? – nsave
@nsave: хорошая точка, обновлено. – tokland