[转帖]ruby的数组操作

[size=large][转帖]ruby的数组操作[/size]
原文:[url]http://fujinbing.iteye.com/blog/1126232[/url]

ruby语言的内置数据结构强大到让我震惊。下面展示了ruby数组的部分魔力


1. &

[ 1, 1, 3, 5 ] & [ 1, 2, 3 ] # => [1, 3]

取两个数组中都有的元素,但只取一个,不重复取。

2. *

[ 1, 2, 3 ] * 3 # => [1, 2, 3, 1, 2, 3, 1, 2, 3]

如果*号后面跟的是数字n,将原先数组中的所有元素重复n次,串联起来。相当于普通数字的乘法操作。

[ 1, 2, 3 ] * "--" # => "1--2--3"

如果*号后面跟的是字符串,也将返回字符串。

3. +

[ 1, 2, 3 ] + [1, 4, 5 ] # => [1, 2, 3, 1, 4, 5]

简单的将两个数组连接在一起,不删除重复元素。

4. -

[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]
# => [3, 3, 5]

从第一个数组中删除所有出现在第二给数组中的元素。

5. <<

[ 1, 2 ] << "c" << "d" << [ 3, 4 ] << [3, 4]
# => [1, 2, "c", "d", [3, 4], [3, 4]]

在数组末尾添加新元素,也不管重复不重复。

6. ==

[ "a", "c" ] == [ "a", "c", 7 ] # => false
[ "a", "c", 7 ] == [ "a", "c", 7 ] # => true
[ "a", "c", 7 ] == [ "a", "d", "f" ] # => false

判断两个数组是否相等——数组相等的前提是,数组所有元素相等,数组大小也当然相等。

7. |

[ "a", "b", "c" ] | [ "c", "d", "a" ]
# => ["a", "b", "c", "d"]

取两个数组中所有元素组成的集合,删除重复元素。

8. at

a = [ "a", "b", "c", "d", "e" ]
a.at(0) # => "a"
a.at(-1) # => "e"
a.at(5) # => nil

取回某个索引中的元素,倒数第一个索引是-1,第二个是-2。

9. clear

a = [ "a", "b", "c", "d", "e" ]
a.clear # => []

删除数组中的所有元素

10. collect!

a = [ "a", "b", "c", "d" ]
a.collect! {|x| x + "$" } # => ["a$", "b$", "c$", "d$"]
a # => ["a$", "b$", "c$", "d$"]

对数组中的每一个元素进行遍历,block中对元素的操作将改变元素的值。

11. compact

[ "a", nil, "b", nil, "c", nil ].compact # => ["a", "b", "c"]

删除数组中所有值为nil的元素,也即压缩数组。

12. concat

[ "a", "b" ].concat( ["c", "d"] ) # => ["a", "b", "c", "d"]

将第二个数组中的元素添加在第一个数组末尾,组成新数组。

13. count

[1, 2, 3, 4].count(3) # => 1
[1, 2, 3,3, 4].count(3) # => 2
[1, 2, 3, 4].count {|obj| obj > 2 } # => 2

计算数组中等于某个值的元素有几个。

14. delete

a = [ "a", "b", "b", "b", "c" ]
a.delete("b") # => "b"
a # => ["a", "c"]
a.delete("z") # => nil
a.delete("z") { "not found" } # => "not found"

删除数组中值为某个给定值的元素。

15. each

a = [ "a", "b", "c" ]
a.each {|x| print x, " -- " }
result :
a -- b -- c --

遍历数组,打印元素值。

16. each_index

a = [ "a", "b", "c" ]
a.each_index {|x| print x, " -- " }
result :
0 -- 1 -- 2 --

遍历数组,打印索引。

17. empty?

[].empty? # => true
[ 1, 2, 3 ].empty? # => false

判断数组是否为空。

18. join

[ "a", "b", "c" ].join # => "abc"
[ "a", "b", "c" ].join("-") # => "a-b-c"

将数组中的元素连接成字符串。如果给定参数,则在每个元素直接加入该参数。

19. last

[ "w", "x", "y", "z" ].last # => "z"
[ "w", "x", "y", "z" ].last(1) # => ["z"]
[ "w", "x", "y", "z" ].last(3) # => ["x", "y", "z"]

如果不给定参数,取最后一个元素。如果给定参数n,取最后n个参数组成数组。

20. length

[ 1, nil, 3, nil, 5 ].length # => 5

长度。空元素nil也算元素,计算在长度范围内。

21. pop

a = %w{ f r a b j o u s }
a.pop # => "s"
a # => ["f", "r", "a", "b", "j", "o", "u"]
a.pop(3) # => ["j", "o", "u"]
a # => ["f", "r", "a", "b"]

返回删除了最后n个元素后的数组。

22. push

a = [ "a", "b", "c" ]
a.push("d", "e", "f") # => ["a", "b", "c", "d", "e", "f"]

在数组末尾插入元素。

23. replace

a = [ "a", "b", "c", "d", "e" ]
a.replace([ "x", "y", "z" ]) # => ["x", "y", "z"]
a # => ["x", "y", "z"]

用新数组替换旧数组。

24. reverse

[ "a", "b", "c" ].reverse # => ["c", "b", "a"]
[ 1 ].reverse # => [1]

反转数组。

25. shift

args = [ "-m", "-q", "-v", "filename" ]
args.shift # => "-m"
args.shift(2) # => ["-q", "-v"]
args # => ["filename"]

从数组头部删除n个元素,并将他们返回。若删除的是一个,则返回字符串。若删除两个以上元素,则返回这n个组成的新数组。原数组被改变。

26. unshift

a = [ "b", "c", "d" ]
a.unshift("a") # => ["a", "b", "c", "d"]
a.unshift(1, 2) # => [1, 2, "a", "b", "c", "d"]

在头部加入元素,原数组元素往后移。

27. shuffle

[ 1, 2, 3, 4, 5, 1 ].shuffle # => [5, 1, 3, 4, 1, 2]

将原数组随机打乱。

28. sort

a = [ "d", "a", "e", "c", "b" ]
a.sort! # => ["a", "b", "c", "d", "e"]
a # => ["a", "b", "c", "d", "e"]

返回排序好的数组。

29. values_at

a = %w{ a b c d e f }
a.values_at(1, 3, 5) # => ["b", "d", "f"]
a.values_at(1, 3, 5, 7) # => ["b", "d", "f", nil]
a.values_at(-1, -3, -5, -7) # => ["f", "d", "b", nil]
a.values_at(1..3, 2...5) # => ["b", "c", "d", "c", "d", "e"]

一次取回多个索引位置的值。

30. uniq

a = [ "a", "a", "b", "b", "c" ]
a.uniq # => ["a", "b", "c"]

返回数组中不同的元素。原数组不受影响。


Ruby迭代器each、map、collect、inject

说明:
each——连续访问集合的所有元素
collect—-从集合中获得各个元素传递给block,block返回的结果生成新的集合。
map——-同collect。
inject——遍历集合中的各个元素,将各个元素累积成返回一个值。

例子:
def debug(arr)
puts '--------'
puts arr
end

h = [1,2,3,4,5]
h1 = h
h1.each{|v|puts sprintf('values is:%s',v)}

h2 = h.collect{|x| [x,x*2]}
debug h2

h3 = h.map{|x| x*3 }
debug h3

h4 = h.inject{|sum,item| sum+item}
debug h4
结果:
values is:1
values is:2
values is:3
values is:4
values is:5
--------
1
2
2
4
3
6
4
8
5
10
--------
3
6
9
12
15
--------
15
names = %w[ruby rails java python cookoo firebody]
等同于:
names = ["ruby", "rails", "java", "python", "cookoo", "firebody"]

arr = [1,2,3]
1) arr2 = arr.each{|element| element = element * 2} #arr与arr2仍然都等于[1,2,3] each返回原数组 遍历内对元素的更改不会保存
2) arr2 = arr.map{|element| element = element* 2} #arr等于[1,2,3] arr2等于[2,4,6] map返回更改后的数组 遍历内对元素的更改不会保存
3) arr2 = arr.map!{|element| element = element * 2} #arr与arr2都等于[2,4,6] map!返回更改后的数组 遍历对元素内的更改会保存
collect 效果等于 map
collect! 效果等于map!
if ($ != jQuery) { $ = jQuery.noConflict(); }
别再为跨页读写发愁了!STM32F407模拟I2C驱动24C256/512的避坑指南 本文详细解析了STM32F407模拟I2C驱动24C256/512的跨页写入问题,揭示了24C系列存储器'写满一页不会自动翻页'的关键机制,并提供了经过验证的分页写入算法和优化方案。通过GPIO时序优化、地址计算和错误处理等技巧,帮助开发者解决数据错乱、覆盖等常见问题,实现稳定可靠的EEPROM读写操作。 阅读详情

相关推荐

手把手教你用Gazebo插件实现阿克曼底盘仿真(附Navigation2适配指南)

本文提供了一份完整的ROS2 Navigation2与Gazebo阿克曼底盘仿真全栈指南。从阿克曼运动学原理出发,详细讲解了如何构建URDF/SDF模型、集成gazebo_ros_ackermann_drive插件并进行PID调优,并重点阐述了如何深度适配Navigation2,包括配置Ackermann运动模型、调整规划器与恢复行为,最终实现从建图到自主导航的全流程仿真。

weixin_29310631的博客 398

ruby 的数组操作

ruby语言的内置数据结构强大到让我震惊。下面展示了ruby数组的部分魔力 1. & [ 1, 1, 3, 5 ] & [ 1, 2, 3 ] # => [1, 3] 取两个数组中都有的元素,但只取一个,不重复取。 2. * [ 1, 2, 3 ] * 3 # => [1, 2, 3, 1, 2, 3, 1, 2, 3] 如果*号后面跟的是数字n,将原先数组...

iteye_572的博客 586

别再瞎猜了!三角形接法PMSM的相电流到底怎么算?实测线电流转换公式与避坑指南

本文深入解析三角形接法永磁同步电机(PMSM)在FOC控制中的相电流计算误区,提供实测线电流转换公式与避坑指南。针对矢量控制系统中常见的√3换算错误,详细阐述正确的电流重构算法、硬件采样要点及软件优化技巧,帮助工程师实现精确控制并避免电机损坏。

weixin_30367873的博客 467

Ruby 中数组的常用操作

企业级开发中很多时候,并不是去操作项目框架,更多的时候我们是了解业务逻辑然后去操作数据的增删该查。今天就Ruby 中操作数组的方法进行总结。感谢新浪小边边的博客数组的创建和初始化a = Array.[](1,2,3,4) b = Array[1,2,3,4] c = [1,2,3,4] d = Array.new #创建一个空数组 e = Array.new(3) #[nil,nil,nil] 初始

科技改变生活,技术连接你我 1727

保姆级教程:用MediaPipe和BlazePose在Python里实时追踪你的健身动作(附完整代码)

本文提供了一份详细的Python教程,教你如何使用MediaPipe和BlazePose实现实时健身动作追踪。从环境配置、模型选型到实时视频流处理架构设计,再到健身动作量化分析和可视化反馈系统优化,教程涵盖了完整的实现步骤和代码示例,帮助开发者快速构建高效的姿态特征点检测系统。

weixin_42531779的博客 153

用Python玩转ROS机械臂:YOLO目标检测+MoveIt!自动抓取仿真教程

本文详细介绍了如何利用Python集成YOLO目标检测与ROS的MoveIt!运动规划库,实现机械臂的智能抓取仿真。通过Gazebo仿真环境,从视觉感知、坐标转换到运动规划与执行,构建了一套完整的自动化抓取系统,为机器人视觉抓取应用提供了可复现的实践方案。

ppp33的博客 552

Ruby数组(array)的新增和删除

Ruby提供了多种方法来新增和删除元素。

Toml_的博客 629

【DaVinci Configurator专题】-2-将CAN 2.0或CANFD Matrix的Arxml/DBC文件导入到CFG

共9页 目录 1 打开DaVinci Configurator,导入Arxml文件 2 解决导入Arxml文件后可能会出现的一些错误 3 验证CFG的配置 4 根据CFG的配置生成代码 5 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键词: Open the Input Files Assistant Complete update process Update ECU configurati

「汽车电子助手」的博客 6125

Ruby 数组操作(和 Python3 列表+元组+集合 对比)

本来是想写到 Ruby 学习笔记一块的,但是数组操作这块的内容也太多了,Ruby 里没有单独的集合的概念,或许是因为数组就已经涵盖了这些了。所以单独提取出来了。所以,话不多说,直接上菜(为了对比明显,Ruby 中尽量去掉括号)! 数组内建方法 # Ruby [20] pry(main)> names = Array.new => [] [22] pry(main)> names = Array.new(10) => [nil, nil, nil, nil, nil, nil,

Looking的网页备忘录和个人知识库 1479

Google Earth Engine :处理Sentinel-1 GRD SAR数据以估算田间尺度土壤湿度的工作流程(计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB))

本文介绍了利用Google Earth Engine (GEE)处理Sentinel-1 SAR数据估算田间土壤湿度的方法。工作流程包括:定义研究区域并筛选指定日期、轨道参数的Sentinel-1图像;预处理计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB),通过均值滤波降噪并去除无效像素;结合动态世界数据集掩膜水体/城市区域;最终导出时序GeoTIFF文件。DpRVIc基于双极化后向散射系数比,对植被结构敏感,而VVdB反映地表反射特性,二者结合可有效评估土壤湿度。该方法适用于农业监

此星光明博客 383

VS2019编译使用log4cplus 1.2.0

logger.properties 文件。第三步,创建项目来测试,配置库。第二步,使用VS2019编译。

h a 6 6 6 c k 为 你解决复杂难题! 528

Ruby数组操作

数组字面通过[]中以逗号分隔定义,且支持range定义。 1、数组通过[]索引访问 2、通过赋值操作插入、删除、替换元素 3、通过+、-号进行合并删除元素,且集合做为新集合出现 4、通过<<号向原始数据追加元素 5、通过*号重复数组元素 6、通过| 和&符号做并集和交集操作(注意顺序) ...

buside的博客 768

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[转帖]ruby的字符串

[转帖]ruby的字符串 原文:http://fujinbing.iteye.com/blog/1126332 %{String} 用于创建一个使用双引号括起来的字符串 %Q{String} 用于创建一个使用双引号括起来的字符串 str= true or false "hello".include? "lo" #=> true "hello".include?...

jamst 177

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ROR经常犯的错误三 - Array.each

本文首发于: 三人行RubyOnRails话吧 , 转帖请注明出处.   直接进入正题,大家猜想一下,下面这段代码会出现什么结果?     arr =[11,22,33,44,55]         arr.each do |a|       p a       arr.delete(a)     end    return arr 您可以预期的结果是: 11 22 33 44 55 实际结果...

s00n 135

Groovy创始人:Java面临终结 Scala将取而代之(转帖)

<br />2010-08-11 16:22 | 3587次阅读 | 【已有11条评论】发表评论 来源:51CTO | 收藏到我的网摘 Groovy创始人James Strachan前日在其博客(地址在Blogspot,未架好梯子前请勿随便点击)上发表了一篇文章,题目为《Scala as the long term replacement for java/javac? 》。以下是正文部分的翻译: 不要误解我的意思——我在过去的这十来年里写了无数的Java代码,并且坚信它相对C++和Smallt

lixkyx的专栏 1082

(转帖)现代人的学习方式

现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作。然而这两种方法都有弊病。第二种方法的问题当然很明显,不仅浪费了时间,偏离了目标,而且学习效率不高。因为没有实际问题驱动的语言学习通常是不牢固不深入的。有的人学着学着成了语言专家,反而忘了

zp752963831的专栏 553

不要骂我,纯粹转帖,我原来做了八年.NET,现在做java的产品经理……

我一直不愿意陷入语言之争中,每当这个时候,总会有一些伪高手站出来说,语言不重要,重要的是思想。其实这句话真是句屁话。   先说句废话,有太多的人问,你是学什么的?我是学Java的,你呢?是学.NET的么?这种人,真的让人无言,概念没搞清就跑出来谈IT。中国的悲哀。   语言究竟重要不重要?语言代表着生产力水平的高低,同样的一段代码,用汇编写几百行,用Java ,C#写不到十行,哪个的生产力更高,拿什么思想说事不过是语言没学好,欲盖弥彰,然后心虚出来装装高手罢了。试问中国任何一个IT高手,谁能说我新

产品经理独孤虾的专栏 2061

[转帖]DES加密、解密字符串算法(java版)

客户要求实现可逆的密码加密,在网络上搜到这个,在此感谢作者,贴在这里备忘。 DESPlus.java /**  * @author    李国庆  * @company   leemenz (C) copyright  * @time      Nov 1, 2006  10:18:41 AM  * @version   1.0.0.0  * @package   com.des  */ pack...

rubyol 157

线段树新手向攻略

一直想写点什么对读者有用的东西。 上篇说了从基础算法好好学起,那就从线段树开始吧。   一、入坑 线段树,是一种数据结构。大多有用的数据结构,就是通过一定的维护开销,来获得查询、修改等操作开销的降低。 a.它好用吗?在ACM竞赛中还是挺有用的,小比赛到大比赛,简答题到复杂题,都有线段树的身影。嗯,还有人这样评价搞ACM的新人:会写线段树。就是说这个人算是入门了!这样一个能标志着入门ACM

Necs的小窝 1117

(转)3、编程语言演变

翻译转帖 原文链接https://herbertograca.com/2017/07/10/programming-language-evolution/ 这篇文章是软件架构编年史的一部分,这是一系列关于软件架构的文章。在它们中,我写了我在软件架构方面学到的东西,我如何看待它,以及我如何使用这些知识。如果您阅读本系列之前的文章,这篇文章的内容可能会更有意义。 编程语言本身并不是架构的人工制品,但如果我不写它,我会觉得《软件架构编年史》会漏掉一些东西。 因此,让我们快速回顾一下编程语言的历史及其..

zlbook的博客 364

【原创翻译】认识MVC设计模式:web应用开发的基础(基础篇)

原文地址:http://www.larryullman.com/2009/10/08/understanding-mvc/ 全系列INDEX 【原创翻译】认识MVC设计模式:web应用开发的基础(基础篇) 【原创翻译】认识MVC设计模式:web应用开发的基础(框架约定篇) 【原创翻译】认识MVC设计模式:web应用开发的基础(实际编码篇) 翻译:shadowm...

weixin_30929295的博客 125

剖析使Go语言高效的5个特性(1/5): 变量的处理和存储

翻译原文链接 转帖/转载请注明出处 英文原文链接 发表于2014/06/07 我最近受邀在Gocon会议上做了一个演讲。Gocon是一个非常棒的,每半年一次在日本东京举行的Go会议。Gocon 2014是完全由社区举办的一整天活动。它包括了培训以及一个下午的演讲。演讲的主题主要围绕在Go语言在线上环境中的应用。 以下是我的演讲稿。...

weixin_34194551的博客 134

Ruby 数组(Array)

Ruby,作为一种高级编程语言,以其简洁明了的语法和强大的功能而闻名。在Ruby中,数组(Array)是一种基本的数据结构,用于存储一系列有序的元素。本文将深入探讨Ruby数组的特点、用法以及一些高级操作。

lly202406的博客 910

Ruby Array

   1. 数组的创建: array = [1, 2, "3", "4"] 或者 array = Array.new array = Array.new(6) #创建[nil, nil, nil, nil, nil, nil] array = Array.new(6, "a") #创建["a", "a", "a", "a", "a

lulaijin312的专栏 174
上一篇: [转帖]ruby中的catch throw
下一篇: [转帖]重新认识Ruby的多态和duck type
biyeah
博客等级 码龄24年 0粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值