我有一个对象列表(作者),并希望循环遍历它们,将它们的一个属性(名称)打印为粗体,然后在每个循环后面跟随其余的名称,具有此输出:
名称A ,名称B,名称C
名称B ,名称A,名称C
名称C ,名称A,名称B
我以为我可以使用except
执行此操作,但此代码:
titles.each do |t|
...
list_without_current_name = t.authors.except(t.author)
...
end
不会删除作者,但会向我提供其他人的完整列表
答案 0 :(得分:3)
您可以使用Array#permutation
这样的方法
authors = ['Mark Twain', 'George Orwell', 'Ernest Hemingway']
authors.permutation.each do |p|
p.each_with_index {|author, i| i == 0 ? print_bold(author) : print_regular(author)}
end
答案 1 :(得分:1)
titles.each do |t|
t.authors.each do |author|
first_name = author.name
other_authors = t.authors.reject do |a|
a == author
end
authors_sorted = other_authors.sort_by do |other_author|
other_author.name
end
end
#here you output first_name and then authors_sorted
end
答案 2 :(得分:0)
只需将a.author
更改为a
:
authors.each do |a|
print a
authors.except(a).each do |b|
print ", #{b}"
end
print "\n"
end