Мені важко зрозуміти, що роблять у Ruby методи shift і unshift класу Array. Чи може хтось допомогти мені зрозуміти, чим вони займаються?
push
це вгорі, а shift
в інший кінець.
Мені важко зрозуміти, що роблять у Ruby методи shift і unshift класу Array. Чи може хтось допомогти мені зрозуміти, чим вони займаються?
push
це вгорі, а shift
в інший кінець.
Відповіді:
Дивлячись на документацію Ruby
Array.shift видаляє перший елемент із масиву і повертає його
a = [1,2,3]
puts a.shift
=> 1
puts a
=> [2, 3]
Unshift додає надане значення до передньої частини масиву, переміщуючи всі інші елементи на один
a=%w[b c d]
=> ["b", "c", "d"]
a.unshift("a")
=> ["a", "b", "c", "d"]
shift
і unshift
діятиме як стек FILO, push
і shift
діятиме як черга FIFO, якщо мене щось не бентежить.
shift
і unshift
діє так само, як pop
і push
: вони призначені для використання масивів як стеків, до яких ви можете додавати та видаляти елементи (як правило, один раз). Різниця полягає в тому, що як раз shift
і unshift
додавати / видаляти елементи на початку Array
, фактично перекласти ІНГ всі інші елементи, в той час як pop
і push
додавати / видаляти елементи в кінціArray
, так що збереження показників інших елементів.
Приклади:
# Spacing for clarity:
a = [2, 4, 8] # a => [2, 4, 8]
a.push(16, 32) # a => [2, 4, 8, 16, 32]
a.unshift(0, 1) # a => [0, 1, 2, 4, 8, 16, 32]
a.shift # a => [1, 2, 4, 8, 16, 32]
a.pop # a => [1, 2, 4, 8, 16]
Він захоплює перший елемент, видаляє його з масиву та повертає видалений елемент. В основному це спосіб поводження з масивом як зі стеком: shift
є поп, unshift
є push.
pop
і push
є також Array
методом, плутанини робити не слід. :-)
Якщо ви можете думати про масив як про чергу значень, що підлягають обробці, тоді ви можете взяти наступне (переднє) значення та «перекласти» інше значення, щоб зайняти вільний простір. unshift повертає значення назад - можливо, ви не готові обробити деякі з них або дозволите пізніше коду обробити їх.
shift/unshift
схожеpush/pop
на інший кінець масиву, ви можете подумки викинути «f» з імені методів, щоб запам'ятати, який з них «скидає» елементи, а який «вставляє» їх. :)