From: "Vegard (Vegard Itland)" Date: 2022-09-15T11:21:42+00:00 Subject: [ruby-core:109900] [Ruby master Feature#16946] Add an `intersperse` method Issue #16946 has been updated by Vegard (Vegard Itland). Just came across this while attempting to see if there was an elegant way to do this. My use case is that I want to generate an array with separator elements -- specifically, I want to generate a nested array of "cellable" objects in Prawn, interspersed with empty rows, for use with the `table` method. My ideal code is something like this: ``` ruby def call(input) rows = input.map(&method(:to_table_row)).intersperse(empty_row) pdf.table(rows) end # dummy implementation def to_table_row(element) [ { content: "Description" }, { content: element }, ] end def empty_row [{ content: "", colspan: 2, borders: %i[top], height: 10 }] end ``` Of course it's trivial to make some sort of method that does this, or just inline it, but I thought I'd pitch in with a use case :) ---------------------------------------- Feature #16946: Add an `intersperse` method https://bugs.ruby-lang.org/issues/16946#change-99143 * Author: sos4nt (Stefan Sch����ler) * Status: Open * Priority: Normal ---------------------------------------- Haskell has an `intersperse` function which adds a separator between elements of a list. It would be pretty useful to have such method(s) in Ruby, too. Examples for `Array` and `String`: ```ruby [1, 2, 3].intersperse(0) #=> [1, 0, 2, 0, 3] 'Hello'.intersperse('-') #=> "H-e-l-l-o" ``` I'm aware that I can achieve the above with built-in methods, but it's quite cumbersome: (requiring regular expressions / intermediate arrays) ```ruby [1, 2, 3].flat_map { |i| [i, 0] }[0...-1] #=> [1, 0, 2, 0, 3] 'Hello'.gsub(/(?<=.)./, '-\0') #=> "H-e-l-l-o" 'Hello'.chars.join('-') #=> "H-e-l-l-o" ``` -- https://bugs.ruby-lang.org/ Unsubscribe: