Ruby 每个循环的最后一次迭代

Ruby 每个循环的最后一次迭代,ruby,Ruby,我试图在ruby中的each循环的每一行末尾插入一个逗号。我不想最后一行用逗号。我知道数组的功能,但是在这种情况下我有点困惑 我如何重构我的第一次尝试来做我需要的事情 重要线路 全班 您可以使用它提供当前元素和索引。通过这种方式,可以将数组的大小与当前元素进行比较 然而,我不喜欢这种方法。在您的情况下,这是不干净的,因为您正在过滤循环中的记录。我宁愿过滤记录,然后只循环有效记录 file.puts @headers. # keep only elements where the cond

我试图在ruby中的each循环的每一行末尾插入一个逗号。我不想最后一行用逗号。我知道数组的功能,但是在这种情况下我有点困惑

我如何重构我的第一次尝试来做我需要的事情

重要线路

全班

您可以使用它提供当前元素和索引。通过这种方式,可以将数组的大小与当前元素进行比较

然而,我不喜欢这种方法。在您的情况下,这是不干净的,因为您正在过滤循环中的记录。我宁愿过滤记录,然后只循环有效记录

file.puts @headers.
    # keep only elements where the condition matches
    select { |header| header[:table_id] == table[:id] }.
    # convert each element into a line
    map { |header| "`#{table[:source_database]}`.`#{table[:current_name]}`.`#{header[:current_name]}` AS `#{header[:magi_name]}`" }.
    # merge everything into a single string
    join(", ")
您可以使用它提供当前元素和索引。通过这种方式,可以将数组的大小与当前元素进行比较

然而,我不喜欢这种方法。在您的情况下,这是不干净的,因为您正在过滤循环中的记录。我宁愿过滤记录,然后只循环有效记录

file.puts @headers.
    # keep only elements where the condition matches
    select { |header| header[:table_id] == table[:id] }.
    # convert each element into a line
    map { |header| "`#{table[:source_database]}`.`#{table[:current_name]}`.`#{header[:current_name]}` AS `#{header[:magi_name]}`" }.
    # merge everything into a single string
    join(", ")

按照您的意愿处理所有内容,在末尾添加逗号和换行符,并将其放入字符串变量中。完成后,切掉字符串的最后两个字符,然后将其写入文件

for_file = ""
@header.each do |header|
   for_file << header + ",\n"
end
for_file.chop.chop # Gets rid of last newline and comma
file.puts for_file
这可能会使SQL更具可读性,并且仍然可以使用字符串插值


这就是我在自己的脚本中使用字符串插值生成SQL代码的方法

根据需要处理所有内容,在末尾添加逗号和换行符,并将其放入字符串变量中。完成后,切掉字符串的最后两个字符,然后将其写入文件

for_file = ""
@header.each do |header|
   for_file << header + ",\n"
end
for_file.chop.chop # Gets rid of last newline and comma
file.puts for_file
这可能会使SQL更具可读性,并且仍然可以使用字符串插值


这就是我在自己的脚本中使用字符串插值生成SQL代码的方法

将每个_与_index一起使用,看看该索引是否是最后一个?因此,请更改为@tables.each_与_index do | table,index |,然后如果index.last==什么?我几乎已经掌握了这些概念,但还不完全掌握。index是一个数字,所以你应该将它与一个数字进行比较,例如:index=@tables.length-1,然后你应该得到“is it the last element”的布尔值,使用每个_和_索引,看看索引是否是最后一个?所以改为@tables.each_和_index do|table,如果index.last==什么?我几乎已经掌握了这些概念,但还不完全掌握。index是一个数字,所以你应该将它与一个数字进行比较,例如:index==@tables.length-1,然后你应该得到“is it the last element”的布尔值谢谢,这非常有效!这正是我想要实现的,但从概念上来说,这并不存在。谢谢,这很有效!这正是我试图实现的目标,但在概念上却不存在。
file.puts <<EOF
SELECT 'nothing'
FROM dual
UNION
SELECT 'something'
FROM dual;
EOF