0

我有一个对象(作者)列表,并希望通过它们循环打印它们的一个属性(名称)粗体,首先是每个循环的其余名称,具有以下输出:

名字A,名字B,名字C

名字B,名字A,名字C

名字C,名字A,名字B

我以为我可以用 来做到这一点except,但是这段代码:

titles.each do |t| 
  ...
  list_without_current_name = t.authors.except(t.author)
  ...
end

不删除作者,但给了我其他人的完整列表

4

3 回答 3

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
于 2013-11-15T08:22:39.657 回答
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
于 2013-11-15T07:53:57.797 回答
0

只需更改a.authora

authors.each do |a|
  print a
  authors.except(a).each do |b|
    print ", #{b}"
  end
  print "\n"
end
于 2013-11-15T07:24:16.583 回答