Мені важко зрозуміти, що роблять у 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» з імені методів, щоб запам'ятати, який з них «скидає» елементи, а який «вставляє» їх. :)