Crates.io | join-string |
lib.rs | join-string |
version | 0.3.0 |
source | src |
created_at | 2023-10-03 23:01:56.757176 |
updated_at | 2023-10-18 18:36:57.122909 |
description | Join the elements of iterators as a string, interspersing a separator between all elements. |
homepage | https://github.com/panzi/rust-join-string |
repository | https://github.com/panzi/rust-join-string |
max_upload_size | |
id | 991635 |
size | 28,619 |
A simple crate to join elements as a string, interspersing a separator between all elements.
This is done somewhat efficiently, if possible, meaning if the iterator is cheaply
clonable you can directly print the result of Join::join()
without creating a temporary
String
in memory. The Join::join()
method will appear on anything that implements
std::iter::IntoIterator
,
meaning on all iterators and collections. The elements and the separator need to implement
std::fmt::Display
. Alternatively
the Join::join_str()
method can be used to join elements that only implement
AsRef<str>
.
use join_string::Join;
assert_eq!(
"foo bar baz".split_whitespace().join(", ").into_string(),
"foo, bar, baz");
println!("{}",
"foo bar baz".split_whitespace()
.map(|s| s.chars().rev().join(""))
.join(' '));
// Output: oof rab zab
You can also write the result more directly to a
std::io::Write
or
std::fmt::Write
even if the backing iterator doesn't implement
Clone
.
use join_string::Join;
["foo", "bar", "baz"].join(", ").write_io(std::io::stdout())?;
let mut str = String::new();
["foo", "bar", "baz"].join(", ").write_fmt(&mut str)?;
The standard library already provides a similar
std::slice::Join
trait on slices, but not on iterators, and the standard library version always directly returns a
new String
. Further there are multiple other similar crates that however work a bit differently,
e.g. having more restrictions on element and separator types or always returning a String
.