[ruby-core:109900] [Ruby master Feature#16946] Add an `intersperse` method
From:
"Vegard (Vegard Itland)" <noreply@...>
Date:
2022-09-15 11:21:42 UTC
List:
ruby-core #109900
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テシテ殕er)
* 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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>