Project1

标题: 请教inject、select、collect的用法 [打印本页]

作者: wyongcan2008    时间: 2012-2-2 18:41
标题: 请教inject、select、collect的用法
在Game_BattlerBase中看到了以下几个方法,但由于我的基础差看不懂,所以向各位求教。
希望各位能给我讲下以下这些的意思,谢谢
  1.   #--------------------------------------------------------------------------
  2.   # ● 获取当前状态的实例数组
  3.   #--------------------------------------------------------------------------
  4.   def states
  5.     @states.collect {|id| $data_states[id] }
  6.   end
  7.   #--------------------------------------------------------------------------
  8.   # ● 获取所有特性实例的数组
  9.   #--------------------------------------------------------------------------
  10.   def all_features
  11.     feature_objects.inject([]) {|r, obj| r + obj.features }
  12.   end
  13.   #--------------------------------------------------------------------------
  14.   # ● 获取特性实例的数组(限定特性代码)
  15.   #--------------------------------------------------------------------------
  16.   def features(code)
  17.     all_features.select {|ft| ft.code == code }
  18.   end
复制代码
dsu_plus_rewardpost_czw
作者: 亿万星辰    时间: 2012-2-2 20:00
inject
首次运算时将inject的参数带入块中第一个参数,数组中的元素依次代入块中的第二个参数中,并做块中定义的运算。比如
  1. a=[1, 2, 3]
  2. b = a.inject(5) { |r, o| r+ o} # b => 11
  3. 相当于
  4. r=5
  5. o=1
  6. r=r+o
  7. o=2
  8. r=r+o
  9. o=3
  10. r=r+o  # 11
复制代码
select
保留数组中满足块中表达式的元素,简单说就是过滤。
  1. a = [1,2,3,4,5,6,7]
  2. b = a.select{|o| o%2 == 0} # b => [2,4,6]
复制代码
collect
可以让数组中的元素依次带入到块中的运算后,生成一个新数组。
  1. a = [1,2,3]
  2. b=a.collect{|o| o.to_s}  # b => ["1", "2", "3"]
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1