Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用唯一分隔符添加数组的最后一个索引_Arrays_Ruby_Join_Flatten - Fatal编程技术网

Arrays 使用唯一分隔符添加数组的最后一个索引

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" 这里有一个使用牛津逗号的

我试图让数组的最后一个字符与其自身的字符连接。我自己很难弄明白这一点,但我仍然不熟悉ruby上的内置方法。到目前为止,我的情况如下:

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感谢您的提示!我编辑了我的答案以反映您的反馈。我想我应该更仔细地阅读这些文件。干杯