2017-02-08 3 views
0

Я использую Ruby 2.4. У меня есть массив строк - они могут принимать любую форму. Я хочу применить к ним функцию «to_i», но только если строка состоит только из чисел. Я попробовал этотКак преобразовать каждый элемент массива строк в число, подлежащее определенным условиям?

data.map(&:to_i) 

, но это превращает такие вещи, как [ «6M»] на [ «6»], который я «не хочу (я хочу, чтобы это было [„0“], так как есть„M“ там). Затем я попробовал

data.select{|string| string.to_i.to_s == string ? string.to_i : -2 } 

но это тоже ничего не делает. Как преобразовать строки в целые числа при определенных условиях?

ответ

1

Вы были в одном шаге от решения. Нужно еще использовать map, не select там:

%w|6M 6 M|.map { |s| (i = s.to_i).to_s == s ? i : 0 } 
#⇒ [0, 6, 0] 

Другой способ будет использовать Regexp:

%w|6M 6 M|.map { |s| s =~ /\A-?\d+\z/ ? s.to_i : 0 } 
#⇒ [0, 6, 0] 
+0

Как небольшое изменение, как насчет 'data.map {| s | s.match? (/ \ D /)? 0: s.to_i} '? –

+1

@ sagarpandya82 негативы – mudasobwa

0

Я думаю, одна из возможных решений:

a = %w|6m 6 m| 
a.map { |e| Integer(e) rescue 0 } 
#=> [0, 6, 0] 
Смежные вопросы