【发布时间】:2015-03-03 13:37:09
【问题描述】:
假设以下数据元组包含一个人的姓名、年龄和他读过的书:
list = [
["Peter", 21, ["Book 1", "Book 2", "Book 3", "Book 4"],
["Amy", 19, ["Book 3", "Book 4"],
["Sanders", 32, ["Book 1", "Book 2",],
["Charlie", 21, ["Book 4", "Book 5", "Book 6"],
["Amanda", 21, ["Book 2", "Book 5"]
]
将按阅读的书籍分组的名称提取为以下格式的最佳方法是什么(基本上是一个包含书名的数组和阅读者姓名的数组)
results = [
["Book 1", ["Sanders", "Peter"]],
["Book 2", ["Sanders" "Amanda", "Peter"]],
["Book 3", ["Peter", "Amy"]],
["Book 4", ["Charlie", "Peter", "Amy"]],
["Book 5", ["Amanda","Charlie"]],
["Book 6", ["Charlie"]]
]
我尝试了以下迭代方法,该方法提取名称列表并将它们放入哈希中,以书名作为键。
book_hash = Hash.new([])
list.each { |name,age,books|
books { |x| book_hash[x] = book_hash[x] + [name] }
}
results = book_hash.to_a.sort
但是,在处理包含数百万个姓名的大型数据集时,上述方法似乎效率很低。我尝试使用 Array.group_by,但到目前为止我无法使其与嵌套数组一起使用。
有人对以上内容有任何想法吗?
【问题讨论】:
-
你为什么期望你的解决方案给出一个散列的数组?在这种情况下,哈希更有意义。
-
别偷懒。您应该为您的
list提供至少与您的样本结果相对应的足够样本数据。 -
@sawa 抱歉,我刚刚添加了一些示例数据和结果。