У меня был алгоритм перестановки, который я использовал для Эйлера проекта в Python:
def missing(miss,src):
"Returns the list of items in src not present in miss"
return [i for i in src if i not in miss]
def permutation_gen(n,l):
"Generates all the permutations of n items of the l list"
for i in l:
if n<=1: yield [i]
r = [i]
for j in permutation_gen(n-1,missing([i],l)): yield r+j
, Если
n<len(l)
у Вас должна быть вся комбинация, Вам нужно без повторения, Вам нужен он?
Это - генератор, таким образом, Вы используете его в чем-то вроде этого:
for comb in permutation_gen(3,list("ABCDEFGH")):
print comb
Если автомобили
является ассоциацией человека
, а имя
является свойством автомобиля
, то вы можете сделать следующее:
# person = Person.find(conditions)
person.cars.collect { |car| car.name }
Или даже (благодаря ActiveSupport
и / или Ruby 1.9):
person.cars.collect(&:name)
Обновление: это задокументировано в следующих местах:
has_many
возвращает Массив
Array # collect
Символ # to_proc
в ActiveSupport
, используемый во втором примере Символ # to_proc
в Ruby 1.9 Обновление 2: пример, который применяет форматирование:
person.cars.collect { |car| "(#{car.name})" }