赞 | 153 |
VIP | 10 |
好人卡 | 39 |
积分 | 93 |
经验 | 146191 |
最后登录 | 2024-5-6 |
在线时间 | 2504 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 9280
- 在线时间
- 2504 小时
- 注册时间
- 2011-5-20
- 帖子
- 15389
|
taroxd 发表于 2014-7-6 08:44
智商低不是你的错,智商低还很骄傲地炫耀就是你的问题了 - =begin
- ===============================================================================
- ■ 使用方法:
- -------------------------------------------------------------------------------
- ● number 则返回某个单元名称重复的数量。
- 例:[7, 7, 7, 7, 6, 6, 5].number(7) => 4
- ● aftftn 也是返回重复的数量,但与 number 有所不同。
- 例:[7, 7, 7, 7, 6, 6, 5].aftftn(4) => 2
- 也就是说就是数组第几个单元的名称重复的数量。
- ● delete_same 则删除单元里指定名称重复的部分,具有破坏性。
- 例:a = [7, 7, 7, 7, 6, 6, 5]
- a.delete_same(7)
- p a => [7, 6, 6, 5]
- ● same? 则返回是否是重复的单元。
- 例:a = [7, 7, 7, 7, 6, 6, 5]
- p a.same?(4) => false
- p a.same?(3) => true
- ● das 和 das! 都是删除数组中所有重复的单元,但是 das 只会返回删除后的数组,das!
- 具有破坏性。
- 例:a = [7, 7, 7, 7, 6, 6, 5]
- p a.das => [7, 6, 5]
- p a => [7, 7, 7, 7, 6, 6, 5] # 没有变化
- a.das!
- p a => [7, 6, 5]
- # 之后没法再消了,总是返回原来的数组。
- ● aftft 和 index 都是寻找第一个出现的单元,但有所不同。
- 例:a = [7, 7, 7, 7, 6, 6, 5]
- p a.aftft(2) => 0
- 等同于
- p a.index(a[2]) => 0
- ● dasn 和 dasn! 都是先删除重复的单元再计算出重复单元的数量,但是 dasn 只会返
- 回改变后的数组,dasn! 具有破坏性!
- 例:a = [7, 7, 7, 7, 6, 6, 5]
- p a.dasn => [4, 2, 1]
- p a => [7, 7, 7, 7, 6, 6, 5] # 没有变化
- a.dasn!
- p a => [4, 2, 1]
- a.dasn!
- p a => [1, 1, 1]
- a.dasn!
- p a => [3]
- a.dasn!
- p a => [1]
- # 之后永远就会出现 [1] 了。
- ● size 可以自行更改了,请看例子:
- 例:a = [7, 7, 7, 7, 6, 6, 5]
- p a.size => 7
- a.size = 4
- p a => [7, 7, 7, 7]
- p a.size => 4
- a.size **= 2
- p a => [7, 7, 7, 7, nil, nil, nil, nil,
- nil, nil, nil, nil, nil, nil,
- nil, nil]
- # size 可以做任何运算。
- ● fill 就是规定长度往后面 push 相应的字串,具有破坏性。
- 例:a = [7, 7, 7, 7, 6, 6, 5]
- a.fill(3)
- p a => [7, 7, 7, 7, 6, 6, 5, nil, nil,
- nil]
- a.fill(2, "我们") => [7, 7, 7, 7, 6, 6, 5, nil, nil,
- nil, "我们", "我们"]
- ===============================================================================
- =end
- class Array
- def number(nth_name)
- if self.index(nth_name) == nil
- return 0
- end
- num = 1
- for i in 0...self.size
- if self[i] == nth_name and self.index(nth_name) != i
- num += 1
- end
- end
- return num
- end
- def aftftn(index)
- num = 1
- aftft = 0
- for i in 0...self.size
- if self[i] == self[index]
- aftft = i
- break
- end
- end
- for j in 0...self.size
- if self[j] == self[aftft] and aftft != j
- num += 1
- end
- end
- return num
- end
- def delete_same(name)
- if self.number(name) == 0
- return self
- end
- for i in 1..self.number(name)
- for d in 0...self.size
- if self[d] == name and self.index(name) != d
- self.delete_at(d)
- break
- end
- end
- end
- return self
- end
- def same?(index)
- return (self.aftft(index) != index)
- end
- def das # (delete_all_same)
- ary = self.dup
- for j in 0...self.size
- ary.delete_same(self[j])
- end
- return ary
- end
- def das!
- ary = self.dup
- for j in 0...ary.size
- self.delete_same(ary[j])
- end
- return self
- end
- def aftft(index)
- num = nil
- for j in 0...self.size
- if self[index] == self[j]
- num = j
- break
- end
- end
- return num
- end
- def dasn # (delete_all_same_number)
- pushing = []
- ary = self.dup
- a = self.das
- for i in 0...a.size
- pushing[i] = ary.number(a[i])
- end
- return pushing
- end
- def dasn!
- ary = self.dup
- a = self.das
- self.clear
- for i in 0...a.size
- self[i] = ary.number(a[i])
- end
- return self
- end
- def size=(size)
- if self.size == size
- return
- end
- if self.size > size
- s = self.size
- for i in 0..self.size-size
- self.delete_at(s-i)
- end
- return
- end
- for i in self.size...size
- self[i] = nil
- end
- end
- def fill(size, text = nil)
- size.times do
- self.push(text)
- end
- end
- end
复制代码 这里还有个脚本···不过不是我写的,我设定的一个群体技能里有判定是给敌人的伤害如果有相同的就去掉相同伤害,然后每个敌人受到不同伤害之和的平均值···按照ruby的语法怎么缩短更好··· |
|