在 Rust 中打印由空格分隔的迭代器的惯用方法是什么?

编程入门 行业动态 更新时间:2024-10-26 11:18:17
本文介绍了在 Rust 中打印由空格分隔的迭代器的惯用方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我只想要从 std::env::args() 获得的参数变量的空格分隔 String,我一直使用 fold 功能如下:

std::env::args().fold("".to_string(), |accum, s| accum + &s + " ")

然而,这会在末尾产生一个多余的空间,这是不需要的.我尝试使用 truncate 函数,但 truncate 不返回 String,只是修改现有的 String,并且这还需要创建一个中间绑定,以便使用 String 的 len() 调用来定义截断的 String 多长时间> 应该是(我相信,由于 Rust 当前的词汇借用规则,它本身需要一个中间绑定!)

解决方案

在 Rust 中打印所有命令行参数的惯用方法是什么?

fn main() {让 mut args = std::env::args();如果让 Some(arg) = args.next() {打印!("{}", arg);对于 args 中的 args {打印!({}",arg);}}}

或者使用 Itertools 的 format 或 format_with:

使用 itertools::Itertools;//0.8.0fn 主(){println!("{}", std::env::args().format(" "));}

我只想要一个空格分隔的 String

fn args() ->细绳 {让 mut 结果 = String::new();让 mut args = std::env::args();如果让 Some(arg) = args.next() {result.push_str(&arg);对于 args 中的 args {结果.push(' ');result.push_str(&arg);}}结果}fn 主(){println!("{}", args());}

fn args() ->细绳 {让 mut 结果 = std::env::args().fold(String::new(), |s, arg| s + &arg + " ");结果.pop();结果}fn 主(){println!("{}", args());}

如果您使用 Itertools,您可以使用上面的 format/format_with 示例和 format! 宏.

join 也很有用:

使用 itertools::Itertools;//0.8.0fn args() ->细绳 {std::env::args().join(" ")}fn 主(){println!("{}", args());}

在其他情况下,您可能希望使用 穿插:

使用 itertools::Itertools;//0.8.0fn args() ->细绳 {std::env::args().intersperse(" ".to_string()).collect()}fn 主(){println!("{}", args());}

请注意,这不如其他选择有效,因为每次迭代都会克隆 String.

I just want a space separated String of the argument variables obtained from std::env::args(), which I've been creating using the fold function like this:

std::env::args() .fold("".to_string(), |accum, s| accum + &s + " ")

However this creates an extra space at the end which is unwanted. I tried using the truncate function, but truncate doesn't return a String, just modifies the existing String, and also this would require the creation of an intermediate binding in order to use the String's len() call to define how long the truncated String should be (which itself would require an intermediate binding due to Rust's current lexical borrowing rules I believe!)

解决方案

What's an idiomatic way to print all command line arguments in Rust?

fn main() { let mut args = std::env::args(); if let Some(arg) = args.next() { print!("{}", arg); for arg in args { print!(" {}", arg); } } }

Or better with Itertools' format or format_with:

use itertools::Itertools; // 0.8.0 fn main() { println!("{}", std::env::args().format(" ")); }

I just want a space separated String

fn args() -> String { let mut result = String::new(); let mut args = std::env::args(); if let Some(arg) = args.next() { result.push_str(&arg); for arg in args { result.push(' '); result.push_str(&arg); } } result } fn main() { println!("{}", args()); }

Or

fn args() -> String { let mut result = std::env::args().fold(String::new(), |s, arg| s + &arg + " "); result.pop(); result } fn main() { println!("{}", args()); }

If you use Itertools, you can use the format / format_with examples above with the format! macro.

join is also useful:

use itertools::Itertools; // 0.8.0 fn args() -> String { std::env::args().join(" ") } fn main() { println!("{}", args()); }

In other cases, you may want to use intersperse:

use itertools::Itertools; // 0.8.0 fn args() -> String { std::env::args().intersperse(" ".to_string()).collect() } fn main() { println!("{}", args()); }

Note this isn't as efficient as other choices as a String is cloned for each iteration.

更多推荐

在 Rust 中打印由空格分隔的迭代器的惯用方法是什么?

本文发布于:2023-11-30 10:41:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1649689.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:空格   迭代   方法   Rust

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!