一、问题的由来
1、由来
我曾用Julia写过以下字符串数组的方案,可以参考:
https://blog.csdn.net/wowotuo/article/details/52740161

2、具体的问题
一个字符串数组的数组,求其字符串数组元素中的元素之间一一拼接成新字符串数组。
a = [“a1”, “a2”, “a3”];
b = [“b1”, “b2”];
c = [“c1”, “c2”];
list = [a, b, c, …];
要求根据list得到一个结果集合,类似如下格式:
[“a1b1c1”, “a1b1c2”, “a1b2c1”, “a1b2c2”, “a2b1c1”, “a2b1c2”, ……]
即结果集合的每个元素是list内每个数组取且只取一个元素拼接成的一个字符串。
需要说明的是,要提出一个抽象的解决方案,并不限于a,b,c三个数组的拼接

二、如果用Rust来写,应如何写呢?

1、方案一: 用Vec < String > 方式

use std::ops::Deref;
use std::{thread, time};
fn get_new_strings(str1: Vec<String>, str2: Vec<String>) -> Vec<String> {let mut strs: Vec<String> = Vec::new();for s in &str1 {for v in &str2 {let temp: String = (s.deref()).to_string() + v;strs.push(temp);}}strs
}fn main() {let sleep_seconds = std::time::Duration::from_secs(1000);let mut data = Vec::new();let data_0: Vec<String> = ["1", "2", "3"].iter().map(|x| x.to_string()).collect();let data_1: Vec<String> = ["a", "b", "c", "d"].iter().map(|x| x.to_string()).collect();let data_2: Vec<String> = ["e", "f", "g"].iter().map(|x| x.to_string()).collect();let data_3: Vec<String> = ["h", "i", "j", "k"].iter().map(|x| x.to_string()).collect();let data_4: Vec<String> = ["x", "y", "z"].iter().map(|x| x.to_string()).collect();data.push(data_1);data.push(data_2);data.push(data_3);data.push(data_4);let mut temp = data_0;for dt in data {temp = get_new_strings(temp, dt);}println!("temp:{:?} count:{:?}", temp, temp.len());thread::sleep(sleep_seconds);
}

以上方案的不足在于输入项比较麻烦。

2、方案二 :Vec<&str>

fn get_new_strs<'a>(str1: &Vec<&'a str>, str2: &Vec<&'a str>) -> Vec<String> {let mut strs: Vec<String> = Vec::new();for s in str1 {for v in str2 {//let temp: String = s + &v;let temp: String = s.to_string() + v;strs.push(temp);}}strs
}

即:

use std::ops::Deref;
use std::{thread, time};
//方案一
fn get_new_strings(str1: Vec<String>, str2: Vec<String>) -> Vec<String> {let mut strs: Vec<String> = Vec::new();for s in &str1 {for v in &str2 {//let temp: String = s + &v;let temp: String = (s.deref()).to_string() + v;strs.push(temp);}}strs
}
//方案二
fn get_new_strs<'a>(str1: &Vec<&'a str>, str2: &Vec<&'a str>) -> Vec<String> {let mut strs: Vec<String> = Vec::new();for s in str1 {for v in str2 {let temp: String = s.to_string() + v;strs.push(temp);}}strs
}fn main() {let sleep_seconds = std::time::Duration::from_secs(1000);let mut data = Vec::new();let data_0 = vec!["1", "2", "3"];let data_1 = vec!["a", "b", "c", "d"];let data_2 = vec!["e", "f", "g"];let data_3 = vec!["h", "i", "j", "k"];let data_4 = vec!["x", "y", "z"];data.push(data_1);data.push(data_2);data.push(data_3);data.push(data_4);let mut outdata: Vec<String> = data_0.iter().map(|x| x.to_string()).collect();for _dt in data {//Vec<String>=>Vec<&str>let temp = outdata.clone();let _temp: Vec<&str> = temp.iter().map(|x| x.deref()).collect();outdata = get_new_strs(&_temp, &_dt);}println!("outdata:{:?}, count:{:?}", outdata, outdata.len());thread::sleep(sleep_seconds);
}

结果均一样:


三、关于String 与&str

//Vec < String > => Vec<&str>

    let mut outdata: Vec<String> = data_0.iter().map(|x| x.to_string()).collect();//Vec<String>=>Vec<&str>let temp = outdata.clone();let _temp: Vec<&str> = temp.iter().map(|x| x.deref()).collect();

这个可能看起来,比如对于Julia而言,是很轻松的。但是对于Rust而言,却不是轻松的。

四、其它

比如,如果能写成这样,可能是最方便的。想想看,为什么不能?

fn get_new_strs2<'a>(str1: &Vec<&'a str>, str2: &Vec<&'a str>) -> Vec<&'a str> {let mut strs: Vec<&'static str> = Vec::new();for s in str1 {for v in str2 {//let temp: String = s + &v;let temp: &'static str = &(s.to_string() + v);strs.push(temp);}}strs
}

Rust:字符串数组的拼接、与 String 、 str的选择相关推荐

  1. 6种字符串数组的java排序 (String array sort)

    注意,本文不是字符串排序,是字符串数组的排序. 方法分别是: 1.低位优先键索引排序 2.高位优先建索引排序 3.Java自带排序(经过调优的归并排序) 4.冒泡排序 5.快速排序 6.三向快速排序 ...

  2. java 字符串数组定义_「string数组」string 数组怎么定义 - seo实验室

    string数组 string数组的定义有三种: String arr[] = new String[10]; //创建一个长度为10的String 类型数组. String arr[] = {&qu ...

  3. Java 字符串数组定义_「string数组」string 数组怎么定义

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站 点击跳转浏览. string数组的定义有三种: String arr[] = new String[1 ...

  4. C++用string 定义字符串数组

    [cpp] view plaincopy print? #include<iostream> #include<string> using namespace std; #in ...

  5. java 中文 音序,java 中文字符串数组按照音序排列

    java 中文字符串数组按照音序排列 复制代码 代码如下: public class SortComparator implements Comparator{ public int compare( ...

  6. C++接收字符串数组_PHP常用字符串函数(1),PHP面试重点

    欢迎访问 获取字符串长度 1.strlen ( string $string ) : int 获取字符串长度 $str = 'abc';echo strlen($str);//输出3$str = 'a ...

  7. java字符串转字符串数组_Java字符串数组

    java字符串转字符串数组 Java String array is used to hold fixed number of Strings. String array is very common ...

  8. C++实现字符串数组的计数功能总结

    由于字符串的长度计算为: str.size():或者 str.length(); 向量的长度为: vector.size(); 以上两者比较简单,所以不予讨论,下面就字符串数组的有关长度进行相应的讨论 ...

  9. 用c++实现分割字符串函数(分割std::string)

    2018.09.21更新于文章尾部:第二个函数优化了处理时间,占用更少内存和时间 2020.05.07更新于前两个函数:加入了说明注释,方便理解 2022.06.06更新一个比较巧妙的方法<Ge ...

  10. 如何将JSON字符串数组转对象集合

    1.JSON字符串数组转对象集合 String json ="json数组数据"; JSONArray res = JSON.getJSONArray(json); //用json ...

最新文章

  1. 正经“长生不老药”新进展:口服那种,贝佐斯投资 | 柳叶刀子刊
  2. 【模型解读】深度学习网络只能有一个输入吗
  3. matlab写函数进行坐标正反算,基于matlab的坐标正反算
  4. GET和POST史上最全总结
  5. 6-4cifar10数据介绍读取处理(下)
  6. 一文读懂802.1x协议,随便秒杀面试官
  7. MySQL延时更改数据_mysql数据库备份设置延时备份方法(mysql主从配置)
  8. 前言 第一章 为什么要培养好习惯
  9. IE XML漏洞官方补丁下载
  10. LaTeX 在线编辑器(LaTeX online editors)
  11. 微信公众号的调试与测试
  12. 用js两张图片合并成一张图片
  13. 关键词词云怎么做_如何生成关键词云图?
  14. 大数据、云计算、元宇宙——吉吉拍的探索之路
  15. DHCP spoofing,DHCP snooping,傻傻分不清
  16. 编程初学者看不懂程序的几点建议
  17. Android APP头像的图标与背景的设置
  18. 滑雪教程-新手必看(上)
  19. IT行业零基础可以学习吗?
  20. 什么是小间距led显示屏

热门文章

  1. 快速确定代码属于哪个版本
  2. 半透明效果的实现方式
  3. 操作系统对的IIS版本
  4. linux命令补遗 - 1
  5. 【转】Javascript 的词法作用域、调用对象和闭包
  6. promise.prototype.catch()
  7. C语言-字符数组和字符串
  8. 17暴力或dfs:凑算术
  9. [CSS揭秘]不规则投影
  10. 浅谈一下对runloop的理解