Arrays 使用唯一分隔符添加数组的最后一个索引
我试图让数组的最后一个字符与其自身的字符连接。我自己很难弄明白这一点,但我仍然不熟悉ruby上的内置方法。到目前为止,我的情况如下:Arrays 使用唯一分隔符添加数组的最后一个索引,arrays,ruby,join,flatten,Arrays,Ruby,Join,Flatten,我试图让数组的最后一个字符与其自身的字符连接。我自己很难弄明白这一点,但我仍然不熟悉ruby上的内置方法。到目前为止,我的情况如下: def list(names) #last = names.last joined = names.map(&:values).flatten.join(", ") #joined.pop #joined << last.join(" &") end 要输出: "Bart, Lisa & Gary" 这里有一个使用牛津逗号的
def list(names)
#last = names.last
joined = names.map(&:values).flatten.join(", ")
#joined.pop
#joined << last.join(" &")
end
要输出:
"Bart, Lisa & Gary"
这里有一个使用牛津逗号的解决方案,我更喜欢:)
(注意:如果这是Rails,
Array#to _句
会自动执行此操作。)这里有一个使用牛津逗号的解决方案,我更喜欢:)
(注意:如果这是Rails,
Array#to_Session
会自动执行此操作。)这里有一个解决方案,可以根据您的输入生成所需的输出:
def list(names)
*head, tail = names.map(&:values)
[head.join(", "), tail].join(" & ")
end
享受吧 这里有一个解决方案,可以根据您的输入生成所需的输出:
def list(names)
*head, tail = names.map(&:values)
[head.join(", "), tail].join(" & ")
end
享受吧 我建议创建一个字符串,用逗号分隔所有名称(例如,“Bart,Lisa,Garry”),然后用“&”替换最后一个逗号。这里有两种方法 代码
def list1(names)
all_commas(names).tap { |s| s[s.rindex(',')] = ' &' }
end
def list2(names)
all_commas(names).sub(/,(?=[^,]+\z)/, ' &')
end
def all_commas(names)
names.map(&:values).join(', ')
end
names = [{ name: 'Bart' }, { name: 'Lisa' } , { name: 'Garry' }]
list1 names
#=> "Bart, Lisa & Garry"
list2 names
#=> "Bart, Lisa & Garry"
示例
def list1(names)
all_commas(names).tap { |s| s[s.rindex(',')] = ' &' }
end
def list2(names)
all_commas(names).sub(/,(?=[^,]+\z)/, ' &')
end
def all_commas(names)
names.map(&:values).join(', ')
end
names = [{ name: 'Bart' }, { name: 'Lisa' } , { name: 'Garry' }]
list1 names
#=> "Bart, Lisa & Garry"
list2 names
#=> "Bart, Lisa & Garry"
解释
步骤如下
对于所有逗号
:
对于list1
tap
的块返回s
对于list2
正则表达式采用正向前瞻,其内容为“匹配一个逗号,后跟除逗号以外的一个或多个字符,后跟字符串结尾”。我建议创建一个字符串,所有名称都用逗号分隔(例如,“Bart,Lisa,Garry”),然后将最后一个逗号替换为“&”。这里有两种方法 代码
def list1(names)
all_commas(names).tap { |s| s[s.rindex(',')] = ' &' }
end
def list2(names)
all_commas(names).sub(/,(?=[^,]+\z)/, ' &')
end
def all_commas(names)
names.map(&:values).join(', ')
end
names = [{ name: 'Bart' }, { name: 'Lisa' } , { name: 'Garry' }]
list1 names
#=> "Bart, Lisa & Garry"
list2 names
#=> "Bart, Lisa & Garry"
示例
def list1(names)
all_commas(names).tap { |s| s[s.rindex(',')] = ' &' }
end
def list2(names)
all_commas(names).sub(/,(?=[^,]+\z)/, ' &')
end
def all_commas(names)
names.map(&:values).join(', ')
end
names = [{ name: 'Bart' }, { name: 'Lisa' } , { name: 'Garry' }]
list1 names
#=> "Bart, Lisa & Garry"
list2 names
#=> "Bart, Lisa & Garry"
解释
步骤如下
对于所有逗号
:
对于list1
tap
的块返回s
对于list2
正则表达式采用正向前瞻,内容为“匹配逗号,后跟逗号以外的一个或多个字符,后跟字符串末尾”.您能添加一个输入和预期输出的示例吗?我只是为混淆感到抱歉。您能添加一个输入和预期输出的示例吗?我只是为混淆感到抱歉。您可以用平面地图替换地图+平面地图。我添加了
平面地图
。关于牛津逗号的观点很好。我认为它实际上不会被OP使用:)你可以用flat\u mapI替换map+flatten添加flat\u map
。关于牛津逗号的观点很好。我假设OP实际上不会使用它:)注意,您可以使用map
而不是flat\u map
,因为它是递归应用的。@CarySwoveland感谢您的提示!我编辑了我的答案以反映您的反馈。我想我应该更仔细地阅读这些文件。干杯请注意,您可以使用map
而不是递归应用的flat\u map
。@CarySwoveland感谢您的提示!我编辑了我的答案以反映您的反馈。我想我应该更仔细地阅读这些文件。干杯