2013-07-23 2 views
0

У меня есть массив:Выберите только определенный элемент

line = ["0;\t0\n", "1;\t0\n", "2;\t0\n", "3;\t0\n", "4;\t0\n", "5;\t0\n", "6;\t0\n", "7;\t0\n", "8;\t0\n", "9;\t0\n", "10;\t0\n", "11;\t0\n", "12;\t0\n", "13;\t0\n", "14;\t0\n", "15;\t0\n", "16;\t0\n", "17;\t0\n", "18;\t0\n", "19;\t0\n", "20;\t0\n", "21;\t4,8\n", "22;\t9,5\n", "23;\t13,8\n", "24;\t18,5"] 

Я хочу, чтобы извлечь значения, лежащие в основе точки с запятой. Можно ли извлекать значения (0, 0, 0, ..., 4, 8, 9, 5, 13, 6 и т. Д.)? Как мне это сделать? Я пробовал:

sa=line.split(";") 
sa1=sa[1].delete "\n" 
sa1=sa1.delete "\t" 
sa1=sa1.to_i 
$sa1 = sa1 

Когда я показываю $sa1, я вижу только 18,5.

ответ

1

Это легко:

str = ["0;\t0\n", "1;\t0\n", "2;\t0\n", "3;\t0\n", "4;\t0\n", "5;\t0\n", "6;\t0\n", "7;\t0\n", "8;\t0\n", "9;\t0\n", "10;\t0\n", "11;\t0\n", "12;\t0\n", "13;\t0\n", "14;\t0\n", "15;\t0\n", "16;\t0\n", "17;\t0\n", "18;\t0\n", "19;\t0\n", "20;\t0\n", "21;\t4,8\n", "22;\t9,5\n", "23;\t13,8\n", "24;\t18,5"] 

p str.map{|el| el.split(/;\t/)[1].chomp} 

Результат:

# ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "4,8", "9,5", "13,8", "18,5"] 
+0

Благодарим Вас за подсказку! Оно работает. – user2610581

+0

Это нормально, продолжайте изучать рубин :) –

+0

@ user2610581 Вы писали * Я хочу только значение за точкой с запятой. *, Вместо этого я думаю, что вы должны написать * Я хочу только значение после точки с запятой. * .... :)) lollz –

0
a=["0;\t0\n", "1;\t0\n", "2;\t0\n"] 
p a.map{|i| i[0..i.index(';')-1]} 
#>> ["0", "1", "2"] 

a=["0;\t0\n", "1;\t0\n", "2;\t12\n"] 
p a.map{|i| i[i.index("\t")+1..-1].chomp} 
# >> ["0", "0", "12"] 
0

Sting#[]

line.map{|s| s[/;\s*(\S+)/, 1]} 
# => ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "4,8", "9,5", "13,8", "18,5"] 
Смежные вопросы