如何使用Ruby按类别打印数组元素?
这里我有todos
一个数组数组:
todos = [
["Send invoice", "money"],
["Clean room", "organize"],
["Pay rent", "money"],
["Arrange books", "organize"],
["Pay taxes", "money"],
["Buy groceries", "food"]
]
我想为类别构建一个数组,如下所示:
[["money", ["Send invoice", "Pay rent", "Pay taxes"]], ...]
预期产量:
money:
Send invoice
Pay rent
Pay taxes
organize:
Clean room
Arrange books
food:
Buy groceries
这是我的尝试:
a, b, c = ["money"], ["organize"], ["food"]
for i in todos
if i[1] == "money"
arr = []
a.push(arr.push(i[0])) #=> ["money", ["Send invoice"], ["Pay rent"], ["Pay taxes"]]
elsif i[1] == "organize"
arr = []
b.push(arr.push(i[0])) #=> ["organize", ["Clean room"], ["Arrange books"]]
else
arr = []
c.push(arr.push(i[0])). #=> ["food", ["Buy groceries"]]
end
end
**解释:**在我的代码中,我将值直接赋给了数组a, b, c = ["money"], ["organize"], ["food"]
,这是错误的。我怎样才能得到预期的产量?
3条答案
按热度按时间mzmfm0qo1#
我会这样做:
这是怎么回事?
Enumerable#group_by
返回按其Array#last
值分组的嵌套数组,并将返回如下所示的嵌套散列结构:在方法链的下一步中,它使用
Enumerable#map
将每个键/值对转换为最终结构,方法是返回一个包含来自grouped_by
的键的数组和一个仅包含来自原始值的first
值的嵌套数组。例如,它将在一次迭代中接受此输入,并将其转换为:vybvopom2#
我们可以使用
#each_with_object
在todos
上迭代,构建一个散列,对于这个任务来说,这似乎是一个更有用的数据结构。这样做相当于:
要把它变成数组的数组。
wooyq4lh3#
在这里,我们使用带有速记方法调用的
group_by
方法,这将返回一个散列,其中键是块的计算结果,值是集合中与键对应的元素数组。我们还对块使用
transform_values
方法,并根据给定的块对哈希值进行转换上述陈述的结果