我有一个对象(作者)列表,并希望通过它们循环打印它们的一个属性(名称)粗体,首先是每个循环的其余名称,具有以下输出:
名字A,名字B,名字C
名字B,名字A,名字C
名字C,名字A,名字B
我以为我可以用 来做到这一点except
,但是这段代码:
titles.each do |t|
...
list_without_current_name = t.authors.except(t.author)
...
end
不删除作者,但给了我其他人的完整列表
我有一个对象(作者)列表,并希望通过它们循环打印它们的一个属性(名称)粗体,首先是每个循环的其余名称,具有以下输出:
名字A,名字B,名字C
名字B,名字A,名字C
名字C,名字A,名字B
我以为我可以用 来做到这一点except
,但是这段代码:
titles.each do |t|
...
list_without_current_name = t.authors.except(t.author)
...
end
不删除作者,但给了我其他人的完整列表
你可以使用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
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
只需更改a.author
为a
:
authors.each do |a|
print a
authors.except(a).each do |b|
print ", #{b}"
end
print "\n"
end