вторник, 31 июля 2012 г.

Using Ranges - two dots vs three dots. Две или три точки.



irb(main):001:0> letters = ('A'..'Z').to_a
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]


Преобразование строки(?) в массив. Вродь и не строка это, хз. В общем, шо-та преобразовали в массив. Написав две точки, мы вывели все буквы алфавита от А до Z, включая Z.


irb(main):001:0> numbers = (1..10).to_a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Здесь также вывели все числа, включая последнюю.


irb(main):001:0> letters = ('A'...'Z').to_a
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y"]


Когда мы пишем три точки, то выводятся все элементы, не считая последнего.


irb(main):001:0> numbers = (1...10).to_a
[1, 2, 3, 4, 5, 6, 7, 8, 9]


И снова вывелись все числа, но без "10".

Имхо, как-то не очень логично. Ну, так, на интуитивном уровне мне кажется, что там, где точек больше, там и выводиться должно больше, т.е. все элементы. Но это моя интуиция. Значит, буду запоминать как-то так, как придется :)

Arrays and Strings. Массивы и строки. Метод .split.



irb(main):001:0> 'dog, cat, cow, goat, monkey'.split(', ')
["dog", "cat", "cow", "goat", "monkey"]


Изначально это была строка. Мы применили к ней метод .split + в круглых скобочках поставили одинарные кавычки, разделенные запятой - и строка превратилась в массив.
Для превращения массива в строку есть также метод .join.
В вики написано даже, что строки очень удобно преобразовывать туда и обратно. И если работа со строками обходится без преобразования в массив, то программа либо очень простая, либо бесполезная. 

воскресенье, 29 июля 2012 г.

Common array methods - removing elements: .pop, .shift, .delete_at, .delete



irb(main):001:0> array=['one', 'two', 'three', 'four', 'five']; array.pop
five

.pop - выстреливать. В общем, этот метод "выталкивает" последний элемент массива и выводит его. (Вот объяснение из викиучебника: Удаляет последний элемент из массива array и возвращает его. Если на момент вызова массив был пуст, то возвращает nil 
Вот такой примерчег еще:
a = [ "a", "m", "z" ]
  a.pop   #=> "z"
  a       #=> ["a", "m"]


Таким образом у нас есть массив, содержащий три элемента. Мы методом поп (спецом написала на русском - в этом что-то есть:)) удаляем последний. И когда мы в следующий раз хотим вывести массив, он уже выводится без последнего элемента.


irb(main):001:0> array=['one', 'two', 'three', 'four', 'five']; array.shift
one

.shift - сдвигать. Выдает первый элемент массива.


irb(main):001:0> array=['one', 'two', 'three', 'four', 'five']; array.delete_at(2)
three

.delete_at() - удаляет после определенного, заданного, элемента. В данном случае после второго.


irb(main):001:0> array=['one', 'two', 'three', 'four', 'five']; array.delete('two'); array
["one", "three", "four", "five"]


.delete(' ') - удаляет определенный заданный элемент.

Common array methods - add an element, .sort, .push, .inspect, .reverse

sdf


irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves << 'Crazy'
["Doc", "Sleepy", "Bashful", "Grumpy", "Happy", "Sneezy", "Dopey", "Crazy"]


Значок << добавляет еще один элемент(ы) в конец строки.


irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.push('Strange')
["Doc", "Sleepy", "Bashful", "Grumpy", "Happy", "Sneezy", "Dopey", "Strange"]


.push - также добавляет элемент(ы) в конец строки. Интересно, когда предпочтительней использовать первый метод, а когда - второй.


irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.sort.inspect
["Bashful", "Doc", "Dopey", "Grumpy", "Happy", "Sleepy", "Sneezy"]


.sort.inspect - ну, sort - понятно, сортирует по алфавиту. А вот шо такое inspect - хз. В вики написано, что .inspect создает "печатную" версию массива. (Печатная версия массива - это строка).


irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.sort.reverse.inspect
["Sneezy", "Sleepy", "Happy", "Grumpy", "Dopey", "Doc", "Bashful"]

.reverse - переставляет элементы в обратном порядке.

суббота, 28 июля 2012 г.

Common array methods: .slice, .first, .last, .include?(''), .index, .length

Общие методы массива.

irb(main):001:0> servers = %w{alpha bravo charlie}; servers.slice(1,2)
["bravo", "charlie"]


.slice - выдало первое и второе. С учетом нулевого.


irb(main):001:0> servers = %w{alpha bravo charlie}; servers.first
alpha

. first - выдало первое.

irb(main):001:0> servers = %w{alpha bravo charlie}; servers.last
charlie

.last - выдало последнее.

irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.include?('Donner')
false

.include? + значение. Мы кагбэ спрашиваем, включен ли в этот список гном по имени Доннер. Интерпретатор возвращает значение "нет".

irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.include?('Happy')
true

.include? + значение. То же самое. Только ответ теперь положительный.

irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.index('Happy')
4

.index выдает порядковый номер элемента. Здесь результат "4", т.к. 'Doc' - 0, 'Sleepy' - 1 и т.д. Т.е. отсчет идет с 0.

irb(main):001:0> dwarves=['Doc', 'Sleepy', 'Bashful', 'Grumpy', 'Happy', 'Sneezy', 'Dopey']; dwarves.length
7


.length - выдает количество элементов в массиве.

пятница, 27 июля 2012 г.

Creating arrays. Создание массивов.



irb(main):001:0> numbers=[1, 2, 3]
[1, 2, 3]

Простое создание массива из чисел.


irb(main):001:0> fruits=['apple', 'banana', 'watermelon']
["apple", "banana", "watermelon"]

Простое создание массива из слов.


irb(main):001:0> mixed_array=[1, "apple", "candy", 20.5]
[1, "apple", "candy", 20.5]

Создание массива из чисел и слов. Слова почему-то уже написаны в двойных кавычках. Интересно, это значимо или нет)


irb(main):001:0> servers = %w{alpha bravo charlie}
["alpha", "bravo", "charlie"]


%w - whitespace - т.е. вместо того, чтобы писать все с кавычками и запятыми, мы ставим значок %w и пишем массив в фигурных скобках. Выдается все то же, только немного упростили))

вторник, 24 июля 2012 г.

Dates & Times in Ruby


irb(main):001:0> t=Time.now; puts "The current month is #{t.month}"
The current month is 7



Выдает текущий месяц.


irb(main):001:0> t=Time.now; puts "The current year is #{t.year}"
The current year is 2012


Выдает текущий год.


irb(main):001:0> t=Time.now; puts "The current day is #{t.day}"
The current day is 24


Выдает текущий день.


irb(main):001:0> t=Time.now; puts "Today's date is #{t.month}/#{t.day}/#{t.year}"
Today's date is 7/24/2012


Выдает текущую дату.


irb(main):001:0> t=Time.now; puts "Epoch time is #{t.tv_sec}"
Epoch time is 1343171023

Выдает количество секунд, прошедших с начала эпохи. ( В системах Unix и Linux время отслеживается в секундах до или после начала эпохи, которое определяется как полночь 1 янв. 1970 года по UTC (Universal Coordinated Time - универсальное синхронизированное время). Положительные значения времени относятся к периоду после начала эпохи, отр. - до начала эпохи. Взято отсюда. tv - вероятно, сокращение от time value. Ыы, это я с фотега взяла.

irb(main):001:0> s = Time.now.to_a[0]; puts "The current second is #{s}";
The current second is 33


Выдает текущую секунду. .to_a расшифровывается как to array - преобразовать в массив. Не могу понять - здесь и в последующих примерах - имеет ли значение, что стоит в квадратных скобках. Почему здесь именно "0"? И что это значит))
Появилась догадка. Может быть, [0] - это секунды, [1] - это минуты, [2] - часы, [3] - по счету день в месяце и т.д. 



irb(main):001:0> m = Time.now.to_a[1]; puts "The current minute is #{m}";
The current minute is 9

Выдает текущую минуту.

irb(main):001:0> h = Time.now.to_a[2]; puts "The current hour is #{h}";
The current hour is 16


Выдает текущий час.


irb(main):001:0> d = Time.now.to_a[3]; puts "The current day of month is #{d}";
The current day of month is 24


Выдает текущее число.


irb(main):001:0> yday = Time.now.to_a[7]; print "The current day of year is #{yday}";
The current day of year is 206

Выдает текущий день в году.