前端技术
HTML
CSS
Javascript
前端框架和UI库
VUE
ReactJS
AngularJS
JQuery
NodeJS
JSON
Element-UI
Bootstrap
Material UI
服务端和客户端
Java
Python
PHP
Golang
Scala
Kotlin
Groovy
Ruby
Lua
.net
c#
c++
后端WEB和工程框架
SpringBoot
SpringCloud
Struts2
MyBatis
Hibernate
Tornado
Beego
Go-Spring
Go Gin
Go Iris
Dubbo
HessianRPC
Maven
Gradle
数据库
MySQL
Oracle
Mongo
中间件与web容器
Redis
MemCache
Etcd
Cassandra
Kafka
RabbitMQ
RocketMQ
ActiveMQ
Nacos
Consul
Tomcat
Nginx
Netty
大数据技术
Hive
Impala
ClickHouse
DorisDB
Greenplum
PostgreSQL
HBase
Kylin
Hadoop
Apache Pig
ZooKeeper
SeaTunnel
Sqoop
Datax
Flink
Spark
Mahout
数据搜索与日志
ElasticSearch
Apache Lucene
Apache Solr
Kibana
Logstash
数据可视化与OLAP
Apache Atlas
Superset
Saiku
Tesseract
系统与容器
Linux
Shell
Docker
Kubernetes
[微服务架构配置管理]的搜索结果
这里是文章列表。热门标签的颜色随机变换,标签颜色没有特殊含义。
点击某个标签可搜索标签相关的文章。
点击某个标签可搜索标签相关的文章。
转载文章
...,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。 求多个数最小公倍数的一种变换算法 2011-07-21 10:39:49| 分类: C++|举报|字号 订阅 令[a1,a2,..,an] 表示a1,a2,..,an的最小公倍数,(a1,a2,..,an)表示a1,a2,..,an的最大公约数,其中a1,a2,..,an为非负整数。对于两个数a,b,有[a,b]=ab/(a,b),因此两个数最小公倍数可以用其最大公约数计算。但对于多个数,并没有[a1,a2,..,an]=M/(a1,a2,..,an)成立,M为a1,a2,..,an的乘积。例如:[2,3,4]并不等于24/(2,3,4)。即两个数的最大公约数和最小公倍数之间的关系不能简单扩展为n个数的情况。 本文对多个数最小公倍数和多个数最大公约数之间的关系进行了探讨。将两个数最大公约数和最小公倍数之间的关系扩展到n个数的情况。在此基础上,利用求n个数最大公约数的向量变换算法计算多个数的最小公倍数。 1. 多个数最小公倍数和多个数最大公约数之间的关系 令p为a1,a2,..,an中一个或多个数的素因子,a1,a2,..,an关于p的次数分别为r1,r2,..,rn,在r1,r2,..,rn中最大值为rc1=rc2=..=rcm=rmax,最小值为rd1=rd2=..=rdt=rmin,即r1,r2,..,rn中有m个数所含p的次数为最大值,有t个数所含p的次数为最小值。例如:4,12,16中关于素因子2的次数分别为2,2,4,有1个数所含2的次数为最大值,有2个数所含2的次数为最小值;关于素因子3的次数分别为0,1,0,有1个数所含3的次数为最大值,有2个数所含3的次数为最小值。 对最大公约数有,只包含a1,a2,..,an中含有的素因子,且每个素因子次数为a1,a2,..,an中该素因子的最低次数,最低次数为0表示不包含[1]。 对最小公倍数有,只包含a1,a2,..,an中含有的素因子,且每个素因子次数为a1,a2,..,an中该素因子的最高次数[1]。 定理1:[a1,a2,..,an]=M/(M/a1,M/a2,..,M/an),其中M为a1,a2,..,an的乘积,a1,a2,..,an为正整数。 例如:对于4,6,8,10,有[4,6,8,10]=120,而M=46810=1920,M/(M/a1,M/a2,..,M/an) =1920/(6810,4810,4610,468)=1920/16=120。 证明: M/a1,M/a2,..,M/an中p的次数都大于等于r1+r2+..+rn-rmax,且有p的次数等于r1+r2+..+rn-rmax的。这是因为 (1) M/ai中p的次数为r1+r2+..+rn-ri,因而M/a1,M/a2,..,M/an中p的次数最小为r1+r2+..+rn-rmax。 (2) 对于a1,a2,..,an中p的次数最大的项aj(1项或多项),M/aj中p的次数为r1+r2+..+rn-rmax。 或者对于a1,a2,..,an中p的次数最大的项aj,M/aj中p的次数小于等于M/ak,其中ak为a1,a2,..,an中除aj外其他的n-1个项之一,而M/aj中p的次数为r1+r2+..+rn-rmax。 因此,(M/a1,M/a2,..,M/an)中p的次数为r1+r2+..+rn-rmax,从而M/(M/a1,M/a2,..,M/an)中p的次数为rmax。 上述的p并没有做任何限制。由于a1,a2,..,an中包含的所有素因子在M/(M/a1,M/a2,..,M/an)中都为a1,a2,..,an中的最高次数,故有[a1,a2,..,an]=M/(M/a1,M/a2,..,M/an)成立。 得证。 定理1对于2个数的情况为[a,b]=ab/(ab/a,ab/b)=ab/(b,a)=ab/(a,b),即[a,b]=ab/(a,b)。因此,定理1为2个数最小公倍数公式[a,b]=ab/(a,b)的扩展。利用定理1能够把求多个数的最小公倍数转化为求多个数的最大公约数。 2.多个数最大公约数的算法实现 根据定理1,求多个数最小公倍数可以转化为求多个数的最大公约数。求多个数的最大公约数(a1,a2,..,an)的传统方法是多次求两个数的最大公约数,即 (1) 用辗转相除法[2]计算a1和a2的最大公约数(a1,a2) (2) 用辗转相除法计算(a1,a2)和a3的最大公约数,求得(a1,a2,a3) (3) 用辗转相除法计算(a1,a2,a3)和a4的最大公约数,求得(a1,a2,a3,a4) (4) 依此重复,直到求得(a1,a2,..,an) 上述方法需要n-1次辗转相除运算。 本文将两个数的辗转相除法扩展为n个数的辗转相除法,即用一次n个数的辗转相除法计算n个数的最大公约数,基本方法是采用反复用最小数模其它数的方法进行计算,依据是下面的定理2。 定理2:多个非负整数a1,a2,..,an,若aj>ai,i不等于j,则在a1,a2,..,an中用aj-ai替换aj,其最大公约数不变,即 (a1,a2,..,aj-1,aj,aj+1,..an)=(a1,a2,..,aj-1,aj-ai,aj+1,..an)。 例如:(34,24,56,68)=(34,24,56-34,68)=(34,24,22,68)。 证明: 根据最大公约数的交换律和结合率,有 (a1,a2,..,aj-1,aj,aj+1,..an)= ((ai,aj),(a1,a2,..,ai-1,ai+1,..aj-1,aj+1,..an))(i>j情况),或者 (a1,a2,..,aj-1,aj,aj+1,..an)= ((ai,aj),(a1,a2,..,aj-1,aj+1,..ai-1,ai+1,..an))(i<j情况)。 而对(a1,a2,..,aj-1,aj-ai,aj+1,..an),有 (a1,a2,..,aj-1,aj-ai,aj+1,..an)= ((ai, aj-ai),( a1,a2,..,ai-1,ai+1,.. aj-1,aj+1,..an))(i>j情况),或者 (a1,a2,..,aj-1,aj-ai,aj+1,..an)= ((ai, aj-ai),( a1,a2,..,aj-1,aj+1,.. ai-1,ai+1,..an))(i<j情况)。 因此只需证明(ai,aj)=( ai, aj-ai)即可。 由于(aj-ai)= aj-ai,因此ai,aj的任意公因子必然也是(aj-ai)的因子,即也是ai,( aj-ai)的公因子。由于aj = (aj-ai)+ai,因此ai,( aj-ai)的任意公因子必然也是aj的因子,即也是ai,aj的公因子。所以,ai,aj的最大公约数和ai,(aj-ai) 的最大公约数必须相等,即(ai,aj)=(ai,aj-ai)成立。 得证。 定理2类似于矩阵的初等变换,即 令一个向量的最大公约数为该向量各个分量的最大公约数。对于向量<a1,a2,..,an>进行变换:在一个分量中减去另一个分量,新向量和原向量的最大公约数相等。 求多个数的最大公约数采用反复用最小数模其它数的方法,即对其他数用最小数多次去减,直到剩下比最小数更小的余数。令n个正整数为a1,a2,..,an,求多个数最大共约数的算法描述为: (1) 找到a1,a2,..,an中的最小非零项aj,若有多个最小非零项则任取一个 (2) aj以外的所有其他非0项ak用ak mod aj代替;若没有除aj以外的其他非0项,则转到(4) (3) 转到(3) (4) a1,a2,..,an的最大公约数为aj 例如:对于5个数34, 56, 78, 24, 85,有 (34, 56, 78, 24, 85)=(10,8,6,24,13)=(4,2,6,0,1)=(0,0,0,0,1)=1, 对于6个数12, 24, 30, 32, 36, 42,有 (12, 24, 30, 32, 36, 42)=(12,0,6,8,0,6)=(0,0,0,2,0,6)=(0,0,0,2,0,0)=2。 3. 多个数最小共倍数的算法实现 求多个数最小共倍数的算法为: (1) 计算m=a1a2..an (2) 把a1,a2,..,an中的所有项ai用m/ai代换 (3) 找到a1,a2,..,an中的最小非零项aj,若有多个最小非零项则任取一个 (4) aj以外的所有其他非0项ak用ak mod aj代替;若没有除aj以外的其他非0项,则转到(6) (5) 转到(3) (6) 最小公倍数为m/aj 上述算法在VC环境下用高级语言进行了编程实现,通过多组求5个随机数最小公倍数的实例,与标准方法进行了比较,验证了其正确性。标准计算方法为:求5个随机数最小公倍数通过求4次两个数的最小公倍数获得,而两个数的最小公倍数通过求两个数的最大公约数获得。 5.结论 计算多个数的最小公倍数是常见的基本运算。n个数的最小公倍数可以表示成另外n个数的最大公约数,因而可以通过求多个数的最大公约数计算。求多个数最大公约数可采用向量转换算法一次性求得。 本篇文章为转载内容。原文链接:https://blog.csdn.net/u012349696/article/details/21233457。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-10-04 16:29:43
39
转载
Beego
代码质量管理:建立和维护代码质量指标 1. 引言 嗨,各位开发者们!今天咱们来聊聊如何在使用Beego框架时,有效地管理和提升代码的质量。大家都知道,代码质量直接影响着项目的稳定性和可维护性。尤其是在大型项目中,良好的代码质量能大大减少后期的维护成本。Beego可是个超牛的Go语言Web框架,自带了不少神器,帮咱们把代码质量提升好几个档次。那么,接下来就让我们一起看看具体该怎么做吧! 2. 理解代码质量的重要性 首先,我们要明白为什么代码质量这么重要。想想看,要是你接了个代码乱七八糟的项目,那得多抓狂啊!不仅开发效率会大幅降低,而且出现bug的概率也会增加。反过来讲,如果代码写得条理清晰、逻辑严密,那你开发时就会觉得特别顺手,以后要维护起来也轻松很多。 举个简单的例子,假设你正在开发一个用户登录功能,如果代码组织得好,添加新的验证逻辑或者修改现有的逻辑就会变得异常简单。但是,如果你的代码乱七八糟,每次想改点东西都得花大把时间去捋清楚,那感觉就像是在做噩梦一样。 3. 使用Beego进行代码质量控制 Beego框架本身提供了一些内置的功能来帮助我们提高代码质量。下面我们就来看看几个具体的例子。 3.1 静态代码分析工具 首先,我们得借助一些静态代码分析工具来检查我们的代码。Beego支持多种这样的工具,比如golangci-lint。我们可以把它集成到我们的CI/CD流程中,确保每次提交的代码都经过了严格的检查。 示例代码: bash 在项目根目录下安装golangci-lint curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.45.2 运行lint检查 golangci-lint run 3.2 单元测试 其次,单元测试是保证代码质量的重要手段。Beego框架非常适合编写单元测试,因为它提供了很多方便的工具。比如我们可以使用beego/testing包来编写和运行测试。 示例代码: go package user import ( "testing" . "github.com/smartystreets/goconvey/convey" ) func TestUser(t testing.T) { Convey("Given a valid user", t, func() { user := User{Name: "John Doe"} Convey("When calling GetFullName()", func() { fullName := user.GetFullName() Convey("Then the full name should be correct", func() { So(fullName, ShouldEqual, "John Doe") }) }) }) } 3.3 代码审查 代码审查也是不可或缺的一环。通过团队成员之间的相互检查,可以发现并修复很多潜在的问题。Beego项目本身就是一个很好的例子,它的贡献者们经常进行代码审查,从而保持了代码库的高质量。 示例代码: bash 提交代码前先进行一次本地的代码审查 git diff HEAD~1 | gofmt -d 4. 持续改进 最后,我们需要不断地回顾和改进我们的代码质量标准。随着时间慢慢过去,咱们的需求和用的技术可能会有变化,所以定期看看咱们的代码质量指标,并根据需要调整一下,这事儿挺重要的。 示例代码: go // 假设我们决定对所有的HTTP处理函数添加日志记录 func (c UserController) GetUser(c gin.Context) { // 添加日志记录 log.Println("Handling GET request for user") // 原来的代码 id := c.Param("id") user, err := userService.GetUser(id) if err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "User not found"}) return } c.JSON(http.StatusOK, user) } 5. 结语 总之,代码质量的管理是一个持续的过程,需要我们不断地学习和实践。用Beego框架能让我们更快搞定这个活儿,不过到最后还得靠我们自己动手干才行。希望大家都能写出既优雅又高效的代码! 好了,今天的分享就到这里,如果你有任何问题或建议,欢迎随时交流。希望这篇文章对你有所帮助,也期待我们在未来的项目中一起努力,共同提高代码质量!
2024-12-21 15:47:33
65
凌波微步
转载文章
...,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。 Python数据预处理的方法 数据预处理是数据分析、挖掘及机器学习应用中非常重要的一环。在数据预处理过程中,数据清洗和数据转换是必要的步骤。本文将介绍如何使用Python进行数据预处理工作,让我们一起来了解下。 数据清洗 数据清洗是数据分析中最重要的步骤之一,它将不完整的、错误的和未处理的数据转变为可以使用的数据。以下是一些常见的数据清洗方法: 缺失值处理 在真实的数据集中,缺失值是很常见的。可以使用Pandas库的isna()函数来判断哪些值是缺失值,并使用fillna()函数来填充缺失值。 数据去重 在数据集中,有可能存在重复数据。Pandas库提供了drop_duplicates()函数来去除重复数据。 异常值处理 在数据集中有时可能出现异常值,这些异常值可能会导致算法出现错误的结果。可以使用Pandas库的clip()函数将异常值限制在特定范围内。 数据转换 数据转换是数据预处理中另一个必要的步骤,利用数据转换可以将原始数据转换为适合算法分析的形式。 特征缩放 特征缩放是将特征值缩放到适当的取值范围内的方法。Pandas库中提供了StandardScaler()函数来实现特征缩放操作。 独热编码 独热编码可以将离散型数据转换为数值型数据,这对于某些机器学习算法来说是非常重要的。sklearn库的OneHotEncoder()函数可以实现独热编码。 特征降维 当数据集具有高维特征时,可以利用特征降维技术将数据集的特征降至低维进行处理。常用的特征降维算法有PCA、LDA等。sklearn库提供了PCA()函数可以实现特征降维。 结论 数据预处理是机器学习中非常重要的步骤,对于需要经过大量处理的原始数据进行变换,规范化和标准化以提高后续处理及结果的准确性非常必要。Python中的Pandas和sklearn库提供了许多函数工具,可以方便地进行数据清洗和数据转换的操作。希望本文可以为大家提供一些基础的数据预处理方法的参考。 最后的最后 本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。 对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。 🧡AI职场汇报智能办公文案写作效率提升教程 🧡 专注于AI+职场+办公方向。 下图是课程的整体大纲 下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具 🚀 优质教程分享 🚀 🎄可以学习更多的关于人工只能/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦! 学习路线指引(点击解锁) 知识定位 人群定位 🧡 AI职场汇报智能办公文案写作效率提升教程 🧡 进阶级 本课程是AI+职场+办公的完美结合,通过ChatGPT文本创作,一键生成办公文案,结合AI智能写作,轻松搞定多场景文案写作。智能美化PPT,用AI为职场汇报加速。AI神器联动,十倍提升视频创作效率 💛Python量化交易实战 💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 本篇文章为转载内容。原文链接:https://blog.csdn.net/liangzijiaa/article/details/131335933。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2024-02-09 12:42:15
704
转载
Apache Lucene
...ransformer架构的新模型。该模型在多个公开数据集上的实验结果表明,相较于传统方法,其词性标注精度提高了约5%。这项研究成果有望推动词性标注技术在实际应用中的普及,特别是在金融、医疗等领域,对专业术语的准确识别具有重要意义。 这些新技术的应用和发展,不仅展示了自然语言处理领域的最新动态,也为解决分词过程中的常见问题提供了新的视角和方法。未来,随着更多创新技术和理论的涌现,我们有理由相信,分词技术将会变得更加高效和智能,从而进一步提升搜索引擎和智能系统的用户体验。
2025-01-09 15:36:22
87
星河万里
转载文章
...,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。 文章目录 制作炫酷烟花特效 一、普通烟花(分散形) HTML代码 CSS代码 JS代码 二、圆形烟花 HTML代码 CSS代码 JS代码 三、爱心形烟花 HTML代码 CSS代码 JS代码 四、源码获取 在线下载 制作炫酷烟花特效 💡本篇内容使用html+css+js制作鼠标点击出现烟花效果,分别介绍了分散型烟花,圆形烟花和爱心形烟花,爱心形烟花算法比较复杂,需要源码的小伙伴可以通过文章末尾链接下载。 一、普通烟花(分散形) 效果展示 HTML代码 引入js 文件 <script type="text/javascript" src="buffermove1.js"></script> CSS代码 创建一个黑色背景 <style type="text/css">{padding: 0px;margin: 0px;}body{background: 000;width: 100%;height:100%;overflow: hidden;}</style> JS代码 <script type="text/javascript">//this绑定的属性可以在整个构造函数内部都可以使用,而变量只能在函数内部使用。function Fireworks(x,y){//x,y鼠标的位置this.x=x;this.y=y;var that=this;//1.创建烟花。this.ceratefirework=function(){this.firework=document.createElement('div');//整个构造函数内部都可以使用this.firework.style.cssText=width:5px;height:5px;background:fff;position:absolute;left:${this.x}px;top:${document.documentElement.clientHeight}px;;document.body.appendChild(this.firework);this.fireworkmove();};//2.烟花运动和消失this.fireworkmove=function(){buffermove(this.firework,{top:this.y},function(){document.body.removeChild(that.firework);//烟花消失,碎片产生that.fireworkfragment();});};//3.创建烟花的碎片this.fireworkfragment=function(){for(var i=0;i<this.ranNum(30,60);i++){this.fragment=document.createElement('div');this.fragment.style.cssText=width:5px;height:5px;background:rgb(${this.ranNum(0,255)},${this.ranNum(0,255)},${this.ranNum(0,255)});position:absolute;left:${this.x}px;top:${this.y}px;;document.body.appendChild(this.fragment);this.fireworkboom(this.fragment);//将当前创建的碎片传过去,方便运动和删除} }//4.碎片运动this.fireworkboom=function(obj){//obj:创建的碎片//设点速度(值不同,正负符号不同)var speedx=parseInt((Math.random()>0.5?'-':'')+this.ranNum(1,15));var speedy=parseInt((Math.random()>0.5?'-':'')+this.ranNum(1,15));//初始速度var initx=this.x;var inity=this.y;obj.timer=setInterval(function(){//一个盒子运动initx+=speedx;inity+=speedy;if(inity>=document.documentElement.clientHeight){clearInterval(obj.timer);document.body.removeChild(obj);}obj.style.left=initx+'px';obj.style.top=inity+'px';},20);}//随机方法this.ranNum=function (min,max){return Math.round(Math.random()(max-min))+min;};}document.onclick=function(ev){var ev=ev||window.event;new Fireworks(ev.clientX,ev.clientY).ceratefirework();}</script> 二、圆形烟花 效果展示 HTML代码 引入js 文件 <script type="text/javascript" src="buffermove1.js"></script> CSS代码 创建一个黑色背景 <style type="text/css">{padding: 0px;margin: 0px;}body{background: 000;width: 100%;height:100%;overflow: hidden;}</style> JS代码 <script type="text/javascript">//this绑定的属性可以在整个构造函数内部都可以使用,而变量只能在函数内部使用。function Fireworks(x,y){//x,y鼠标的位置this.x=x;this.y=y;var that=this;//1.创建烟花。this.ceratefirework=function(){this.firework=document.createElement('div');//整个构造函数内部都可以使用this.firework.style.cssText=width:5px;height:5px;background:fff;position:absolute;left:${this.x}px;top:${document.documentElement.clientHeight}px;;document.body.appendChild(this.firework);this.fireworkmove();};//2.烟花运动和消失this.fireworkmove=function(){var that=this;buffermove(this.firework,{top:this.y},function(){document.body.removeChild(that.firework);//烟花消失,碎片产生that.fireworkfragment();});};//3.创建烟花的碎片this.fireworkfragment=function(){var num=this.ranNum(30,60);//盒子的个数this.perRadio=2Math.PI/num;//弧度for(var i=0;i<num;i++){this.fragment=document.createElement('div');this.fragment.style.cssText=width:5px;height:5px;background:rgb(${this.ranNum(0,255)},${this.ranNum(0,255)},${this.ranNum(0,255)});position:absolute;left:${this.x}px;top:${this.y}px;;document.body.appendChild(this.fragment);this.fireworkboom(this.fragment,i);//将当前创建的碎片传过去,方便运动和删除} }//4.碎片运动this.fireworkboom=function(obj,i){//obj:创建的碎片var r=10;obj.timer=setInterval(function(){//一个盒子运动r+=4;if(r>=200){clearInterval(obj.timer);document.body.removeChild(obj);}obj.style.left=that.x+Math.sin(that.perRadioi)r+'px';obj.style.top=that.y+Math.cos(that.perRadioi)r+'px';},20);}//随机方法this.ranNum=function (min,max){return Math.round(Math.random()(max-min))+min;};}document.onclick=function(ev){var ev=ev||window.event;new Fireworks(ev.clientX,ev.clientY).ceratefirework();}</script> 三、爱心形烟花 效果展示 HTML代码 引入js 文件 <script type="text/javascript" src="buffermove1.js"></script> CSS代码 创建一个黑色背景 <style type="text/css">{padding: 0px;margin: 0px;}body{background: 000;width: 100%;height:100%;overflow: hidden;}</style> JS代码 <script type="text/javascript">//this绑定的属性可以在整个构造函数内部都可以使用,而变量只能在函数内部使用。function Fireworks(x,y){//x,y鼠标的位置this.x=x;this.y=y;var that=this;//1.创建烟花。this.ceratefirework=function(){this.firework=document.createElement('div');//整个构造函数内部都可以使用this.firework.style.cssText=width:5px;height:5px;background:fff;position:absolute;left:${this.x}px;top:${document.documentElement.clientHeight}px;;document.body.appendChild(this.firework);this.fireworkmove();};//2.烟花运动和消失this.fireworkmove=function(){buffermove(this.firework,{top:this.y},function(){document.body.removeChild(that.firework);//烟花消失,碎片产生that.fireworkfragment();});};//3.创建烟花的碎片this.fireworkfragment=function(){var num=this.ranNum(30,60);//盒子的个数this.perRadio=2Math.PI/num;//弧度for(var i=0;i<num;i++){this.fragment=document.createElement('div');this.fragment.style.cssText=width:5px;height:5px;background:rgb(${this.ranNum(0,255)},${this.ranNum(0,255)},${this.ranNum(0,255)});position:absolute;left:${this.x}px;top:${this.y}px;;document.body.appendChild(this.fragment);this.fireworkboom(this.fragment,i);//将当前创建的碎片传过去,方便运动和删除} }//x=16Math.pow(sint,3); //Math.sin(perRadioi)//y=13Cost-5Cos2t-2Cos3t-Cos4t//4.碎片运动this.fireworkboom=function(obj,i){//obj:创建的碎片var r=0.1;obj.timer=setInterval(function(){//一个盒子运动r+=0.4;if(r>=10){clearInterval(obj.timer);document.body.removeChild(obj);}obj.style.left=that.x+16Math.pow(Math.sin(that.perRadioi),3)r+'px';obj.style.top=that.y-(13Math.cos(that.perRadioi)-5Math.cos(2that.perRadioi)-2Math.cos(3that.perRadioi)-Math.cos(4that.perRadioi))r+'px';},20);}//随机方法this.ranNum=function (min,max){return Math.round(Math.random()(max-min))+min;};}document.onclick=function(ev){var ev=ev||window.event;new Fireworks(ev.clientX,ev.clientY).ceratefirework();}</script> 四、源码获取 在线下载 资源链接:https://gitee.com/huang_weifu/JavaScript_demo.git 本篇文章为转载内容。原文链接:https://blog.csdn.net/huangwfu/article/details/128754023。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-02-15 08:02:38
275
转载
Golang
...户体验,也显著降低了服务器成本。此外,该平台还采用了先进的缓存策略和索引优化技术,进一步提升了系统的吞吐量和稳定性。 另一家金融公司则通过引入Go语言和Gorm ORM框架,成功实现了复杂交易系统的重构。该公司报告称,在引入Go语言后,其交易处理速度提升了40%,同时由于Go语言的垃圾回收机制,系统内存使用率降低了约15%。这些改进不仅提升了公司的市场竞争力,也为其未来的业务扩展打下了坚实的基础。 由此可见,无论是电商还是金融行业,Go语言及其相关技术在提升数据库性能和系统稳定性方面展现出了巨大的潜力。未来,随着更多企业的加入,我们有望看到更多基于Go语言的创新解决方案涌现出来,共同推动整个行业的进步和发展。
2024-10-21 15:42:48
78
百转千回
Golang
...context)包来管理请求生命周期内的错误,以及通过中间件或者日志钩子等方式记录和追踪未捕获的panic,以实现更全面的错误监控和故障排查。 总之,无论是在官方语言特性的演进,还是社区实践的发展,对于Golang错误处理的理解和应用都需要紧跟时代步伐,结合具体业务场景,不断提升程序的稳定性和可靠性。
2024-01-14 21:04:26
529
笑傲江湖
Mahout
...法性能优化及生命周期管理的实际挑战。 综上所述,在持续关注Mahout算法性能优化的同时,跟踪其与现代数据处理框架的融合趋势、GPU计算的最新应用以及AIops/MLOps的发展动向,将对提高实际工作效率和推动技术创新具有重要价值。同时,鼓励读者积极参与开源社区讨论,掌握第一手资料,共同推动机器学习与数据挖掘技术的进步。
2023-05-04 19:49:22
129
飞鸟与鱼-t
ClickHouse
...ClickHouse服务器: bash cat /path/to/large_data.csv | clickhouse-client --query="INSERT INTO table_name FORMAT CSV" 2.3 使用clickhouse-local进行快速导入 对于超大型数据集,clickhouse-local可以在本地完成数据预处理并一次性导入到数据库,大大减少网络传输带来的延迟: bash clickhouse-local --structure "column1 String, column2 Int32" --input-format "CSV" --output-format "Native" --query "INSERT INTO table_name" < large_data.csv 3. 数据从ClickHouse导出的最佳实践 3.1 使用SELECT INTO OUTFILE导出数据 你可使用SQL查询配合INTO OUTFILE导出数据至本地文件: sql SELECT FROM table_name INTO OUTFILE '/path/to/exported_data.csv' FORMAT CSV 3.2 利用clickhouse-client导出数据 同样,我们可以通过客户端工具将查询结果直接输出到终端或重定向到文件: bash clickhouse-client -q "SELECT FROM table_name" > exported_data.csv 3.3 配合其他工具实现定时增量导出 为了满足持续性监控或ETL需求,我们可以结合cron作业或其他调度工具,定期执行导出操作,确保数据的时效性和完整性。 4. 总结与思考 ClickHouse强大的数据处理能力不仅体现在查询速度上,也体现在灵活且高效的数据导入导出功能。在实际操作中,咱们得瞅准业务的具体需求,挑个最对路的导入导出方法。而且呀,这可不是一劳永逸的事儿,咱还要随时调整、持续优化这个流程,好让数据量越来越大时,也能应对自如,不至于被挑战压垮了阵脚。同时,千万要记住,在这个过程中,摸清楚数据的脾性和应用场景,灵活机动地调整策略,这才是真正让ClickHouse大显身手的秘诀!每一次数据流动的背后,都承载着我们的深度思考和细致打磨,而这正是数据工程师们在实战中磨砺成长的过程。
2023-02-14 13:25:00
491
笑傲江湖
Kylin
...信息啦。接着,你需要配置你的Hadoop集群信息,包括HDFS地址、JobTracker地址等。最后,点击"提交"按钮,Kylin就会开始创建你的项目。 java // 创建一个新的Kylin项目 ClientService client = ClientService.getInstance(); ProjectMeta meta = new ProjectMeta(); meta.setName("my_project"); meta.setHiveUrl("hdfs://localhost:9000"); meta.setHiveUser("hive"); meta.setHivePasswd("hive"); client.createProject(meta); 四、数据模型设计 在Kylin中,我们通常需要对我们的数据进行建模,以便于后续的查询操作。Kylin提供了两种数据模型:维度模型和事实模型。维度模型,你把它想象成一个大大的资料夹,里面装着实体的各种详细信息,像是什么时间发生的、在哪个地点、属于哪种产品类型等等;而事实模型呢,就更像是个记账本,专门用来记录实体的各种行为表现,像卖了多少货、交易额有多少这些具体的数字信息。 java // 创建一个新的维度模型 DimensionModelDesc modelDesc = new DimensionModelDesc(); modelDesc.setName("my_dim_model"); modelDesc.setColumns(Arrays.asList(new ColumnDesc("dim_date", "date"), new ColumnDesc("dim_location", "string"))); client.createDimModel(modelDesc); // 创建一个新的事实模型 FactModelDesc factModelDesc = new FactModelDesc(); factModelDesc.setName("my_fact_model"); factModelDesc.setColumns(Arrays.asList(new ColumnDesc("fact_sales", "bigint"))); factModelDesc.setDimensions(Arrays.asList("my_dim_model")); client.createFactModel(factModelDesc); 五、报表设计与查询 接下来,我们可以开始设计我们的报表了。在Kylin这个工具里头,我们能够像平常一样用标准的SQL查询语句去查数据,然后把查出来的结果,随心所欲地转换成各种格式保存,比如说CSV啦、Excel表格什么的,超级方便。 java // 查询指定日期的销售数据 String sql = "SELECT dim_date, SUM(fact_sales) FROM my_fact_model GROUP BY dim_date"; CubeInstance cube = CubeManager.getInstance().getCube("my_cube"); List rows = cube.cubeQuery(sql); for (Row row : rows) { System.out.println(row.getString(0) + ": " + row.getLong(1)); } 六、总结 总的来说,Kylin是一个非常强大的数据分析工具,它可以帮助我们轻松地处理大量的数据,并且提供了丰富的查询功能,使得我们能够更方便地获取所需的信息。如果你也在寻找一种高效的数据分析解决方案,那么我强烈推荐你试试Kylin。
2023-05-03 20:55:52
111
冬日暖阳-t
ReactJS
...几个小块儿,这样会好管理一些。 6.2.2 使用有意义的名字 给Fragment起一个有意义的名字,可以让其他开发者更容易理解这个Fragment的作用。例如,你可以根据它的用途来命名,如。 jsx function UserList() { return ( <> 用户列表 用户1 用户2 ); } 七、总结 总的来说,虽然使用Fragment可以极大地提升代码的可读性和可维护性,但在实际开发过程中也需要注意避免一些潜在的问题。希望能帮到你,在以后的项目里更好地用上Fragment,还能避开那些常见的坑。如果有任何疑问或者更好的建议,欢迎随时交流讨论! --- 以上就是关于“使用Fragment时遇到问题”的全部内容,希望对你有所帮助。如果你觉得这篇文章对你有启发,不妨分享给更多的人看到,我们一起进步!
2024-12-06 16:01:42
47
月下独酌
转载文章
...,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。 Html5简单描述(优点与缺点) 什么是HTML5 HTML5指的是包括HTML、CSS和JavaScript在内的一套技术组合。它希望能够减少网页浏览器对于需要插件的丰富性网络应用服务(Plug-in-Based Rich Internet Application,RIA),例如:AdobeFlash、Microsoft Silverlight与Oracle JavaFX的需求,并且提供更多能有效加强网络应用的标准集。HTML5是HTML最新版本,2014年10月由万维网联盟(W3C)完成标准制定。目标是替换1999年所制定的HTML 4.01和XHTML 1.0标准,以期能在互联网应用迅速发展的时候,使网络标准达到匹配当代的网络需求 HTML5现状及浏览器支持 大部分主流浏览器已经支持HTML5,但是各个浏览器支持的方式以及语法有所差异性。支持Html5的浏览器包括Firefox(火狐浏览器),IE9 及其更高版本,Chrome(谷歌浏览器),Safari,Opera等现代浏览器。 HTML5优点与缺点 优点 1、网络标准统一、HTML5本身是由W3C推荐出来的。 2、多设备、跨平台 3、即时更新。 4、提高可用性和改进用户的友好体验; 5、有几个新的标签,这将有助于开发人员定义重要的内容; 6、可以给站点带来更多的多媒体元素(视频和音频); 7、可以很好的替代Flash和Silverlight; 8、涉及到网站的抓取和索引的时候,对于SEO很友好; 9、被大量应用于移动应用程序和游戏。 缺点 a)、安全:像之前Firefox4的web socket和透明代理的实现存在严重的安全问题,同时web storage、web socket 这样的功能很容易被黑客利用,来盗取用户的信息和资料。 b)、完善性:许多特性各浏览器的支持程度也不一样。 c)、技术门槛:HTML5简化开发者工作的同时代表了有许多新的属性和API需要开发者学习,像web worker、web socket、web storage 等新特性,后台甚至浏览器原理的知识,机遇的同时也是巨大的挑战 d)、性能:某些平台上的引擎问题导致HTML5性能低下。 e)、浏览器兼容性:最大缺点,IE9以下浏览器几乎全军覆没。 详细了解HTML5概要与新增标签地址(大神果哥):https://www.cnblogs.com/best/p/6096476.html posted @ 2018-08-12 12:45 韦邦杠 阅读(...) 评论(...) 编辑 收藏 本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_42981419/article/details/86162058。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-11-14 16:22:34
272
转载
Apache Solr
...的地理位置索引和检索服务,就像给自己家的地图装上了精准定位器一样方便。本篇文章将带你深入了解Solr如何在地理空间上施展它的魔力。 2. Apache Solr基础 Solr的核心在于它的强大查询解析能力,特别是利用Lucene的底层技术。它是一个基于Java的框架,允许我们扩展和优化搜索性能。首先,让我们看看如何在Solr中设置一个基本的地理搜索环境: java // 创建一个SolrServer实例 SolrServer server = new HttpSolrServer("http://localhost:8983/solr/mycore"); // 定义一个包含地理位置字段的Document对象 Document doc = new Document(); doc.addField("location", "40.7128,-74.0060"); // 纽约市坐标 3. 地理坐标编码 地理搜索的关键在于正确地编码和存储经纬度。Solr这家伙可灵活了,它能支持好几种地理编码格式,比如那个GeoJSON啦,还有WKT(别名Well-Known Text),这些它都玩得转。例如,我们可以使用Solr Spatial Component(SPT)来处理这些数据: java // 在schema.xml中添加地理位置字段 // 在添加文档时,使用GeoTools或类似库进行坐标编码 Coordinate coord = new Coordinate(40.7128, -74.0060); Point point = new Point(coord); String encodedLocation = SpatialUtil.encodePoint(point, "4326"); // WGS84坐标系 doc.addField("location", encodedLocation); 4. 地理范围查询(BoundingBox) Solr的Spatial Query模块允许我们执行基于地理位置的范围查询。例如,查找所有在纽约市方圆10公里内的文档: java // 构造一个查询参数 SolrQuery query = new SolrQuery(":"); query.setParam("fl", ",_geo_distance"); // 返回地理位置距离信息 query.setParam("q", "geodist(location,40.7128,-74.0060,10km)"); server.query(query); 5. 地理聚合(Geohash或Quadtree) Solr还支持地理空间聚合,如将文档分组到特定的地理区域(如GeoHash或Quadtree)。这有助于区域划分和统计分析: java // 使用Geohash进行区域划分 query.setParam("geohash", "radius(40.7128,-74.0060,10km)"); List geohashes = server.query(query).get("geohash"); 6. 神经网络搜索与地理距离排序 Solr 8.x及以上版本引入了神经网络搜索功能,允许使用深度学习模型优化地理位置相关查询。虽然具体实现依赖于Sease项目,但大致思路是将用户输入转换为潜在的地理坐标,然后进行精确匹配: java // 假设有一个预训练模型 NeuralSearchService neuralService = ...; double[] neuralCoordinates = neuralService.transform("New York City"); query.setParam("nn", "location:" + Arrays.toString(neuralCoordinates)); 7. 结论与展望 Apache Solr的地理搜索功能使得地理位置信息的索引和检索变得易如反掌。开发者们可以灵活运用各种Solr组件和拓展功能,像搭积木一样拼接出适应于五花八门场景的智能搜索引擎,让搜索变得更聪明、更给力。不过呢,随着科技的不断进步,Solr这个家伙肯定还会持续进化升级,没准儿哪天它就给我们带来更牛掰的功能,比如实时地理定位分析啊、预测功能啥的。这可绝对能让我们的搜索体验蹭蹭往上涨,变得越来越溜! 记住,Solr的强大之处在于它的可扩展性和社区支持,因此在实际应用中,持续学习和探索新特性是保持竞争力的关键。现在,你已经掌握了Solr地理搜索的基本原理,剩下的就是去实践中发现更多的可能性吧!
2024-03-06 11:31:08
405
红尘漫步-t
Apache Pig
...,不仅提升了客户体验管理效率,还为企业决策提供了实时、准确的数据支持。 此外,学术界也在持续探索Apache Pig在文本挖掘领域的潜能。近期一项研究将Pig Latin与深度学习框架TensorFlow结合,构建了一种混合式的大规模文本预处理流程,成功应用于新闻语料库的自动分类项目中,展示了Apache Pig在结合前沿技术推动大数据处理创新方面的巨大潜力。 综上所述,Apache Pig在大规模文本数据处理方面的价值得到了实践和理论研究的双重验证,而随着大数据技术的不断迭代更新,我们有理由期待Apache Pig在未来能继续发挥其关键作用,帮助企业和社会科研机构更深入地挖掘和利用信息宝藏。
2023-05-19 13:10:28
723
人生如戏
CSS
...总之,技术永远是为了服务于人,而不是让人迁就技术。希望今天的分享能给大家带来一些启发,同时也希望大家能在实践中不断探索和成长! 好了,今天的分享就到这里啦!如果你还有什么疑问或者想法,欢迎在评论区留言交流哦~咱们下次再见!
2025-04-27 15:35:12
46
风轻云淡_
Mahout
...户尚未接触过的物品或服务。在文章中,作者提到了在使用Mahout 0.9版本进行协同过滤推荐系统开发时遇到的API弃用问题。 分布式计算 , 分布式计算是一种计算模型,将大型计算任务分解成多个子任务,分散在多台计算机上并行执行,从而提高计算效率和处理大规模数据的能力。Apache Mahout作为一款支持分布式计算的机器学习框架,其API设计与实现需要考虑到如何有效地在集群环境中分配和协调计算资源。
2023-09-14 23:01:15
104
风中飘零
Ruby
...考与总结 处理异常和管理资源并不是一门精确科学,而是需要结合具体场景和需求的艺术。在Ruby的天地里,咱们得摸透并灵活玩转begin-rescue-end-ensure这套关键字组合拳,好让咱编写的代码既结实耐摔又运行飞快。这不仅仅说的是程序的稳定牢靠程度,更深层次地反映出咱们开发者对每个小细节的极致关注,以及对产品品质那份永不停歇的执着追求。 每一次与异常的“交锋”,都是我们磨砺技术、提升思维的过程。只有当你真正掌握了在Ruby中妥善处理异常,确保资源被及时释放的窍门时,你才能编写出那种既能经得起风吹雨打,又能始终保持稳定运行的应用程序。就像是建造一座坚固的房子,只有把地基打得牢靠,把每一处细节都照顾到,房子才能既抵御恶劣天气,又能在日常生活中安全可靠地居住。同样道理,编程也是如此,特别是在Ruby的世界里,唯有妥善处理异常和资源管理,你的应用程序才能健壮如牛,无惧任何挑战。这就是Ruby编程的魅力所在,它挑战着我们,也塑造着我们。
2023-09-10 17:04:10
89
笑傲江湖
Python
...式,我们可以更方便地管理和操作半球的相关属性和行为。 4. 总结与反思 通过上述三个不同的示例,我们可以看到,即使是同一个问题,也可以用多种方式来解决。从最基本的函数调用,到让用户动起来的交互设计,再到酷炫的面向对象编程,每种方式都有它的独门绝技。这事儿让我明白,在编程这个圈子里,其实没有什么绝对的对错之分,最重要的是得找到最适合自己眼下情况和需要的方法。 同时,这次探索也让我深刻体会到数学与编程之间的紧密联系。很多时候,我们面对的问题不仅仅是技术上的挑战,更是对数学知识的理解和应用。希望能给你带来点灵感,不管是学Python还是别的啥,保持好奇心和爱折腾的精神可太重要了! 好了,这就是今天的内容。如果你有任何想法或疑问,欢迎随时留言讨论。让我们一起继续学习,享受编程带来的乐趣吧! --- 这篇文章旨在通过具体案例展示如何利用Python解决实际问题,同时穿插了一些个人思考和感受,希望能够符合你对于“口语化”、“情感化”的要求。希望对你有所帮助!
2024-11-19 15:38:42
113
凌波微步
c++
...模板、类和对象、高效管理内存、优化算法和数据结构、遵循命名规范、编写清晰的注释等。掌握这些技巧有助于提升程序员的工作效率,减少错误,提高代码的质量和可读性。 名词 , 数据类型转换。 解释 , 数据类型转换是在编程中将一个数据类型的数据转换为另一个数据类型的过程。在C++中,这可以通过自动类型转换、强制类型转换(如静态_cast、动态_cast、reinterpret_cast和const_cast)以及模板函数等方式实现。正确使用类型转换对于保证程序的正确性和性能至关重要,同时也要注意类型转换可能带来的安全隐患,如数据丢失或运行时错误。 名词 , 类型安全编程。 解释 , 类型安全编程是一种编程实践,旨在确保程序在运行时不会因类型错误而导致崩溃或产生不可预测的行为。在C++中,通过严格遵守类型规则、合理使用类型转换、避免隐式类型转换可能导致的意外行为,以及利用现代C++特性和工具(如范围基元、期待表达式等)来提高代码的类型安全性,可以有效减少程序中的类型错误,从而提高代码的稳定性和可靠性。
2024-09-14 16:07:23
22
笑傲江湖
Mahout
...大提高了其个性化推荐服务的质量。 同时,在实践层面,阿里巴巴集团近期公开分享了他们在电商推荐场景中优化用户相似度计算的经验。他们发现将用户的社会关系网络、购买行为序列以及商品属性特征等多元信息融合进相似度计算模型,能显著提升推荐效果并带来更好的用户体验。 综上所述,用户相似度计算作为推荐系统的核心技术之一,其理论与实践都在不断演进与发展。除了Mahout等传统工具箱之外,现代推荐系统更需要我们紧跟学术前沿,把握行业动态,灵活运用深度学习、图神经网络等先进手段,以适应愈发复杂多变的用户需求和行为模式。
2023-02-13 08:05:07
87
百转千回
Python
...模型-视图-控制器)架构中的“视图”部分的实现,负责处理HTTP请求并将相应结果返回给客户端。在Django框架中,视图函数接收HttpRequest对象作为参数,根据请求内容执行相应的业务逻辑(如数据库查询、数据处理等),然后将处理结果转换为HttpResponse对象返回。文章中的例子展示了如何创建一个简单的Django视图函数,该函数从数据库获取所有博客文章并返回到客户端。 迭代器 , 迭代器是一种设计模式,在Python中表现为具有next()方法的对象,用于访问集合(如列表、字典或生成器)中的元素,但不一次性加载整个集合到内存中。迭代器允许开发者按需逐个访问集合中的项目,从而在处理大量数据时显著减少内存占用,提高程序性能。在文章中,作者提到面对性能优化问题时,会尝试使用迭代器代替列表操作来提升处理大量数据的效率。
2023-09-07 13:41:24
323
晚秋落叶_
转载文章
...,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。 创建数组 val 声明的数组只能改变元素 var 声明的数组可以改变引用 创建方式 举例 Array () 通用数组 Array(size: Int, init: (Int) -> T) val array: Array<Int> = Array(5) { i -> i 2 } 5是数组长度,i是索引值,元素赋值为索引值2 原生数组 IntArray (长度) Array (长度) val ys1 = IntArray(5) //元素都是0 val ys2 = BooleanArray(5) //元素都是false val ys3 = CharArray(5) //元素都是空格 arrayOfXXX () 指定元素(元素可为任意类型) arrayOf () val array1: Array<Any> = arrayOf(1, '你', "hahaah", false) for (element: Any in array1) print(element) val array2: Array<Int> = arrayOf(1, 2, 3) val array3: Array<Person> = arrayOf(person1, person2) 指定长度(元素都为null) arrayOfNulls () val arrayNull: Array<String> = arrayOfNulls<String>(6) 空数组 emptyArray () val empty: Array<String> = emptyArray<String>() 原生数组(避免拆装箱开销) intArrayOf () ArrayOf () val array3: IntArray = intArrayOf(1, 3, 5, 7) val array4: CharArray = charArrayOf('a', 'b', 'c') 原生数组 & 通用数组 为了避免不必要的拆装箱开销,或者与Java互操作,可以使用原生类型数组。这些类与Array没有继承关系,只是有相同的方法属性,因此 IntArray 和 Array<Int> 是完全不同的类型,但两者可以互转。 原生类型数组 对应Java中的基本数据类型数组 IntArray Array int [ ] [ ] 方法 说明 举例 toIntArray () toArray () 通用→原生 val ty: Array<Int> = arrayOf(1, 2, 3) val toIntArray: IntArray = ty.toIntArray() toTypedArray () 原生→通用 val ys: IntArray = intArrayOf(1, 2, 3) val toTypedArray: Array<Int> = ys.toTypedArray() Person[] people = {new Person(), new Person()}; //Javaval people: Array<Person> = arrayOf(Person(), Person()) //Kotlin 遍历 val arr = arrayOf(1,2,3,4,5)//通过forEach循环arr.forEach{println(it)}//通过iterator循环var iterable:Iterator<Integer> = arr.iterator();while(iterable.hasNext()){println(iterable.next())}for(element in arr.iterator()){println(element)}//for循环一for(element in arr){println(element)}//for循环二for(index in 0..arr.size-1){println(arr[index])}//for循环三for(index in arr.indices){println(arr[index])}//for循环四for((index, value) in arr.withIndex()){println("$index位置的元素是:$value")}// 上面写法等价于下面写法for (element in arr.withIndex()) {println("${element.index} : ${element.value}")} 操作 方法 说明 .size .indices 数组长度 数组最大索引值 get (索引) 获取元素,推荐使用操作符 [ ] arr[3] 等同于 arr.get(3) set (索引,目标值) 给元素赋值,推荐使用操作符 [ ] arr[3] = "哈" 等同于 arr.set(3,"哈") plus (目标值) 增加:返回一个数组长度+1并用目标值赋值新元素的新数组,不对原数组进行改动 arr + 6 等同于 arr.plus(6) slice (区间) 截取:返回一个截取该区间元素的新数组,不对原数组进行改动 fill (目标值) fill (目标值,起始索引,结束索引) 修改:将该区间的元素赋值为指定值 copyOf () copyOf (个数) copyOfRange (起始索引,结束索引) 返回一个 完全复制了原数组 的新数组 返回一个 正向复制原数组元素个数 的新数组,超过原数组大小的新元素值为null 返回一个 复制原数组该区间元素 的新数组,超过原数组索引范围报错 asList () 数组转集合 reverse () reversedArray () reversed () 反转:将数组中的元素顺序进行反转 返回一个反转后的新数组,不对原数组进行改动 返回一个反转后的list,不对原数组进行改动 sort () sortedArray () sorted () 排序:对数组中的元素进行自然排序 返回一个自然排序后的新数组,不对原数组进行改动 返回一个自然排序后的list,不对原数组进行改动 joinToString (字符串分隔符) 将Array原生数组拼接成一个String,默认分隔符是“,” all (predicate) any (predicate) 全部元素满足条件返回 true,否则 false 任一元素满足条件返回 true,否则 false val arr = arrayOf(1, 2, 3, 4, 5)val cc = charArrayOf('你','们','好')val brr = arrayOf(5,2,1,4,3)//数组长度val num1 = arr.size //5//最大索引val num2 = arr.indices //4for (i in arr.indices) print(i) //01234//条件判断val boolean1 = arr.all { i -> i > 3 } //false,不是全部元素>3//增val arr1 = arr.plus(6) //123456,长度+1并赋值为6val arr2 = arr + 6 //同上//改val arr3 = arr.slice(2..4) //345arr.fill(0) //00000,操作的是原数组val str1 = cc.joinToString("") //你们好brr.sort() //12345val list1 = brr.sorted() //返回一个排序后的listval brr4 = brr.sortedArray() //返回排序后的新数组val arr5 = arr.copyOf() //12345val arr6 = arr.copyOf(2) //12val arr7 = arr.copyOfRange(2,4) //34 多维数组 //方式一:数组里面存的元素是数组val aa = arrayOf(arrayOf(1, 2, 3),arrayOf(4, 5, 6))print(aa[1][2]) //6//方式二:元素为null但类型是数组val bb = arrayOfNulls<Array<Int>>(2) 本篇文章为转载内容。原文链接:https://blog.csdn.net/HugMua/article/details/121866989。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-03-31 12:34:25
66
转载
站内搜索
用于搜索本网站内部文章,支持栏目切换。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
Ctrl+R
- 启动反向搜索历史命令功能。
推荐内容
推荐本栏目内的其它文章,看看还有哪些文章让你感兴趣。
2023-04-28
2023-08-09
2023-06-18
2023-04-14
2023-02-18
2023-04-17
2024-01-11
2023-10-03
2023-09-09
2023-06-13
2023-08-07
2023-03-11
历史内容
快速导航到对应月份的历史文章列表。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"