我在数组中有一个名单列表,例如:
['John', 'Smith', 'Doe', 'Lee', 'Jack']
我希望它像这样分组:
['Doe']
['Jack', 'John']
['Lee']
['Smith']
我如何使用ruby on rails?
答案 0 :(得分:7)
Enumerable的group_by
是你的朋友:
names = ['John', 'Smith', 'Doe', 'Lee', 'Jack']
names.group_by{ |n| n[0] }
# => {"J"=>["John", "Jack"], "S"=>["Smith"], "D"=>["Doe"], "L"=>["Lee"]}
names.group_by{ |n| n[0] }.values
# => [["John", "Jack"], ["Smith"], ["Doe"], ["Lee"]]
来自文档:
按块的结果对集合进行分组。返回一个哈希,其中键是块的计算结果,值是集合中与键对应的元素数组。
如果您想按字母顺序排序,只需在使用group_by
之前对初始数组进行排序。因为Ruby维护了散列的插入顺序,所以散列的结果值也将按顺序排列:
names.sort.group_by{ |n| n[0] }.values
# => [["Doe"], ["Jack", "John"], ["Lee"], ["Smith"]]
答案 1 :(得分:0)
另一种选择是使用块方法:
names = ['John', 'Smith', 'Doe', 'Lee', 'Jack']
p names.sort.chunk(&:chr).map(&:last) #=> [["Doe"], ["Jack", "John"], ["Lee"], ["Smith"]]