运行clone的.rb档案。用ruby name.rb
1.输入,处理,输出。
解释:
- print 输出变量在荧屏,不会换行
- puts 输出变量但会换行。
- gets 可以从键盘拿到输入的值。得到的是字符串string
- #{} 在string中插入date.
- = 是assignment operator
- ".."名字".." 告诉程序这个是嵌套的双引号。
3,4. 基本运算
解释:
- to_i 转换为整数。才能进行运算。还有to_f,to_s
- float浮点数floating point,四舍五入round,无条件进制ceil, 无条件舍弃floor(文档api https://ruby-doc.org/core-2.4.1/Float.html)
- integer整数
- array and Hash
- string
- 运算符, % 馀数:整除,返回剩余数。
5.6.7.8 控制流程。
variable = case 条件
when 条件 //只能比较是否绝对相等 ===
end
原文:case operates by comparing the target (the expression after the keyword case) with each of the comparison expressions after the when keywords. This test is done using comparison === target. http://ruby-doc.com/docs/ProgrammingRuby/
if 条件
..
elsif //you can have zero or more elsif clauses and an optional else clause.
..
elsif
..
else
..
end
9.10 方法Method (也叫function)
def method(parameter)
...
return...
end
定义Method的时候,默认最后的一行值自动返回,如果是if 。。end语法,⚠️ 需要加return
11-15 Loop
//在while中 ,如果遇到break则中断♻️循环。
rand(100) //在100内选一个随机数。
猜数字游戏:程序会先产生随机数,然后用户开始猜数字。程序会针对猜的数字回答太高、太低或猜中,猜中后程序就会终止。
16-22 Array
https://ruby-doc.org/core-2.4.1/Array.html#method-i-each
- 一个有顺序的容器,用数字当作索引。
- 索引从 0 开始
- 原则上里面的元素,数据类型最好都是一样的,例如都存整数,或是都存字符串。
- array可以嵌套。
array.size
会回传数组长度
array[1] = 999
会更改第二的元素的值
array[99999]
读取一个不存在的值,会回传 nil
array[0]
或 array.first
是数组的第一个元素
array[-1]
或 array.last
是数组的最后一个元素
array.push(999)
或 array << 999
会新增一个元素 999 到数组的最后面
array.unshift(999)
会新增一个元素 999 到数组的最前面
array.delete_at(i)
会删除索引值在 i 的元素
array.sort
return a new array created by sorting self.按顺序排列值。
array.uniq
return a new array by removing duplicate values in self.
更多 Ruby 的 Array 方法请参考 Ruby Array API
array = [ [1,2,3], [4,5,6], [7,8,9] ] array[0][0] # 这是 1 array[0][1] # 这是 2
split和join.
str = "ABCDEFG" str[0] # 得到 "A" str[1] = "x" str # 变成 "AxCDEFG" str.split("") # 用 "" 拆开字符串,得到数组 ["A", "B", "C", "D", "E", "F", "G"] ["x", "y", "z"].join(" ") # 用 " " 串接成字符串,得到 "x y z"
如何走访数组:
用 for 方法
for i in array
puts i
end
在ruby中习惯用用each
题目 16 (费了30分钟原来原理很简单)
给定一阵列内含数字,输出最大值.
解决办法:遍历一遍数组,让较大值去和后续的值比较,并更新较大值,直到遍历结束。api有自带的method(max())
20题
# 承上题,请排序并去除重复的数字 # Hint: 可用 arr.sort 排序,和 arr.uniq 去除重复
def filter_even(arr)
even_arr = []
arr.each do |n|
if n % 2 == 0
even_arr.push(n)
end
end
return even_arr.uniq.sort
end
arr = [7, 68, 42, 46, 9, 91, 77, 46, 86, 1]
puts filter_even(arr).to_s # 应该是 [42, 46, 68, 86]
21 选择排序法selection sort:简单直观的排序算法。 https://zh.wikipedia.org/wiki/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕.
题目 22
给定一阵列内含数字,请输出 0~9 中不见的数字。例如 arr = [2,2,1,5,8,4]
,输出 [0,3,6,7,9]
Api里面有 内置的method 减法 “-” ary - other_ary → new_ary
[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ] #=> [ 3, 3, 5 ]
w 我的做法:双♻️。
// 修改为 c == a
附加:arr.each {| item | block } -> arr
Calls block once for each element in arr, passing that element as a parameter.
a = [ "a", "b", "c" ] a.each {|x| print x, " -- " } |
a -- b -- c -- |
如想输出key而不是value,可以用 arr.each_index { |anIndex| block } -> arr
a = [ "a", "b", "c" ] a.each_index {|x| print x, " -- " } |
0 -- 1 -- 2 -- |