Казвам се Борислав Станимиров и съм от София.
Работя като програмист.
Когато имам свободно време, се занимавам предимно със статии за математика и програмиране. От време на време превеждам и други статии от английската, руската или немската Уикипедия. При тези случаи се водя от значимостта (според мен) на статиите, по-скоро, отколкото от темата.
Как се сортира списък от хора по азбучен ред на фамилиите
data = <<DATA
DATA
class Name
def initialize(name, text)
@name = name
@text = text
end
def <=>(rhs)
@name <=> rhs.name
end
def to_s
@text
end
attr_reader :name
end
names = Array.new(256)
256.times do |i|
names[i] = []
end
data.each_line do |line|
if (line =~ (/\* \[\[.+ (.+)\]\]/)) == 0
n = Name.new($1, line)
names[$1[1]] << n
end
end
256.times do |i|
next if names[i].empty?
puts "===#{names[i][0].name[0..1]}==="
puts names[i].sort
end
Например, имате списъка:
* [[Тошо Киров]] - супер известен човек
* [[Гошо Атанасов]] - още по-супер известен човек
==Произволен текст==
* [[Пешо Кацов]] - президент на света
* [[Груйо Донев]] - цар на вселената
Пействате този текст в скрипта между първото и второто DATA. Пускате го и той отпечатва списъка
===А===
* [[Гошо Атанасов]] - още по-супер известен човек
===Д===
* [[Груйо Донев]] - цар на вселената
===К===
* [[Пешо Кацов]] - президент на света
* [[Тошо Киров]] - супер известен човек
Ако искате да няма букви за всяка фамилия, изтрийте реда puts "===#{i.chr}===". Тогава изходът ще е:
* [[Гошо Атанасов]] - още по-супер известен човек
* [[Груйо Донев]] - цар на вселената
* [[Пешо Кацов]] - президент на света
* [[Тошо Киров]] - супер известен човек
Забележка: скриптът работи само с имена на кирилица в уникод. За да работи за латиница или ascii кирилица, трябват доста поправки, но ако някой иска, нека ми пише и ще пусна и такъв вариант.