随机打乱数组及字符串后追加指定个数字符的方法

2024-08-28 13:58

本文主要是介绍随机打乱数组及字符串后追加指定个数字符的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       实际做业务开发时,需求是千变万化的,一个大功能点会包含很多小功能点,小功能点又会包含若干环节,具体到每个环节,代码实现上又是五花八门,这取决于程序员的编程思路和工作态度,我想不应该仅仅满足功能实现,还应该尽可能的找到最佳实践。对于最佳实践,每个人都有不同理解和定义,简洁、高效、易懂,这是我的理解。刚好最近工作中用到随机打乱数组方法和字符串追加字符方法,实现起来非常简单。对于随机打乱数组的方法,查资料时,发现大家也叫它洗牌算法,也对,一组数据,随机打乱,和洗牌差不多。最先想到的是以前写cnn卷积神经网络代码时,读取样本后,每轮迭代训练时,都需要随机打乱样本,c代码如下(如果对深度学习感兴趣,正在发愁找不到入门示例,可以看看我写的这份LeNet-5代码,谁用谁知道,已开源):

for (i = 0; i < train_sample->sample_count; i++)
{rand_perm[i] = i;
}for (i = 0; i < train_sample->sample_count; i++)
{j = genrand_int31() % (train_sample->sample_count - i) + i;t = rand_perm[j];rand_perm[j] = rand_perm[i];rand_perm[i] = t;
}

       然后我又查了一下,很多博客提及的洗牌算法,java代码如下:

for (int i = n-1; i >= 0; i--) {index = rand(i + 1)%i + 1if(i != index) {exchange(i, index)}        
}

       其实,上面两种方法大同小异,核心思想都对于有序数组,遍历时就是不断将当前元素和后面随机位置的元素交换,进而打乱整个数组。不过进一步查资料发现了更简单的方法,可以使用Collections.shuffle(list),也就是直接使用库函数实现,不是自己手写的不好,而是这些库更健壮、更高效,用起来很方便,也就没必要重复造轮子了。

       同样,对于字符串追加字符的方法,如果使用java,我们肯定想到定义一个StringBuilder,用一个for循环,循环次数也就是追加字符的个数,然后不断的append()就好了,最后输出结果。这样实现没问题,但至少也得写个一小段代码来实现,更简洁、省事的方法是直接使用apache开源commons-lang3库中的StringUtils.repeat()方法,或者StringUtils.rightPad() / StringUtils.leftPad()方法,这样一行代码就搞定了,这个库有很多实用的字符串处理方法。并不是说这些库有多好,这个需要结合工作实际来看待,手写这些功能点的能力还是要有的,不能凡事都去找这些库,如果因为一个小功能点自己懒得写,而引入一个庞然大物一样的库,结果这个库95%的功能都用不到,仅仅用了一丢丢的功能,那就感觉有点得不偿失了。当然引入库,也得看哪里出品的,活跃度如何,也得是高质量的库才行,否则bug一堆,还是算了吧,不如自己手写来的实在。

public  String repeat(char ch, int repeat) {if (repeat <= 0) {return "";} else {char[] buf = new char[repeat];for(int i = repeat - 1; i >= 0; --i) {buf[i] = ch;}return new String(buf);}
}

 

 

这篇关于随机打乱数组及字符串后追加指定个数字符的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114963

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端