2014-04-24 2 views
0

У меня есть массив, заполненный несколько датРубин Удалить несколько элементов из массива

arry = ["06-01-2014", "07-04-2014", "14-01-2014" 
     "14-04-2014", "16-01-2014" "27-03-2014", 
     "30-12-2013", "31-03-2014", "27-02-2014"] 

Я хотел бы удалить элемент 6 и выше, предпочтительно имею 2 различных массивов.

Возможно ли это?

+3

Вы ищете 'arry [0..5]' и 'arry [6 ..- 1]'? –

+0

'arry [5 ..- 1]' отлично работает. спасибо добавить его в качестве ответа, чтобы я мог дать вам кредит. –

+0

Пожалуйста, добавьте две запятые в 'arry'. Нет ответа req'd, поскольку я удалю это после того, как вы сделаете редактирование. Вы всегда должны запускать код, который вы публикуете, чтобы убедиться, что он работает. –

ответ

3

Вы можете принять @ ответ JanDvorak, но вы могли бы сделайте это также

arry = ["06-01-2014", "07-04-2014", "14-01-2014","14-04-2014", "16-01-2014", "27-03-2014","30-12-2013", "31-03-2014", "27-02-2014"] 
first_five = arry.shift(5) 
#=> ["06-01-2014", "07-04-2014", "14-01-2014", "14-04-2014", "16-01-2014"] 
arry 
#=> ["27-03-2014","30-12-2013", "31-03-2014", "27-02-2014"] 

или неразрушающим образом (поддерживается arry)

arry = ["06-01-2014", "07-04-2014", "14-01-2014","14-04-2014", "16-01-2014", "27-03-2014","30-12-2013", "31-03-2014", "27-02-2014"] 
first_five,rest = arry.partition.with_index{|a,i| i < 5} 
first_five 
#=> ["06-01-2014", "07-04-2014", "14-01-2014", "14-04-2014", "16-01-2014"] 
rest 
#=> ["27-03-2014","30-12-2013", "31-03-2014", "27-02-2014"] 
arry 
#=> ["06-01-2014", "07-04-2014", "14-01-2014", "14-04-2014", "16-01-2014","27-03-2014", "30-12-2013", "31-03-2014", "27-02-2014"] 
+0

Это очень помогло. спасибо –

+0

@TonyShier Нет проблем с радостью, я мог бы помочь – engineersmnky

1

Другой способ удалить с помощью индексного

arry.delete_at(5) 

и как уже упоминалось @Jan Dvorak вы можете разделить их на основе индекса позиций с использованием

arry[0..5] and arry[5..-1] 
+0

Какой смысл удалять до нарезки? Все, что он делает, это изменение 'arry', что может быть нежелательно. –

+0

'delete_at (index)' будет удалять один элемент в этом индексе, который вы могли бы использовать 'delete_if.with_index', и выбирать, какие индексы удалить в блоке – engineersmnky

0

Вот еще один (неразрушающий) способ, но ничего не может быть проще и яснее, чем предложил @Jan.

arr = ["06-01-2014", "07-04-2014", "14-01-2014", 
     "14-04-2014", "16-01-2014", "27-03-2014", 
     "30-12-2013", "31-03-2014", "27-02-2014"] 

[arr.first(5), arr.drop(5)] 
    #=> [["06-01-2014", "07-04-2014", "14-01-2014", "14-04-2014", "16-01-2014"], 
    # ["27-03-2014", "30-12-2013", "31-03-2014", "27-02-2014"]] 
+0

не то, что это имеет значение. Я просто думаю, что выглядит лучше, чем использовать 'take' вместо' first', когда используется с 'drop', также должно быть' [arr.first (5), arr.drop (5)] 'иначе вы теряете элемент. – engineersmnky

+0

@engineersmnky, спасибо за исправление. (Я неправильно понял вопрос, поскольку, по сути, раздел на шестом элементе.) Что касается 'take' вместо' first', я безразличен. Вы можете утверждать, что слово 'take' предлагает' remove' (но мы можем сказать то же самое о 'drop'), тогда как' first' не делает. –

+0

Я согласен, но один и тот же аргумент можно было бы сделать для «drop» в любом случае, я люблю видеть, как много способов вышить кошку в рубине :) – engineersmnky

Смежные вопросы