Today's the day

往哪里走都好,不要停下来发呆; 懒得干什么也好,不要懒得思考。

return false 在 IE 下失效了?

拆分数组

galeki posted @ 2008年5月11日 06:52 in Ruby&Rails进修 , 461 阅读
Chito 也支持浮动窗口了

Ruby 中的 Array 类提供了非常实用的 select 和 reject 方法,可以方便的从数组中挑出或剔除符合条件的元素:

  1. a = [1,2,3,4,5,6,7,8]
  2. a.select {|x| x % 2 == 0}
  3. >> [2,4,6,8]

如果想要把数组拆分成两个集合,一个符合某个条件,一个不符合,要怎么办呢?

可以先写一个 select 然后再来个 reject:

  1. a = [1,2,3,4,5,6,7,8]
  2. even = a.select {|x| x % 2 == 0}
  3. odd = a.reject {|x| x % 2 == 0}
  4. >> even = [2,4,6,8]
  5. >> odd = [1,3,5,7]

这样的话,不仅条件要重复写两遍,数组中的元素也要遍历两遍

可以利用 Ruby 可以返回多个值的特性,来写个 separate 函数:

  1. class Array
  2.     def separate
  3.         yes, no = [], []
  4.  
  5.         self.each do |x|
  6.             yield(x) ? yes << x : no << x
  7.         end
  8.  
  9.         return yes, no
  10.     end
  11. end

这样,数组拆分一次就可以搞定了

  1. even, odd = a.separate {|x| x % 2 == 0}
全局相关文章
  • 无匹配
相关文章
  • 无匹配
1
回复
leondu 说:
2008年5月11日 09:45 或者: a = [1,2,3,4,5,6,7,8] even = a.select {|x| x % 2 == 0} odd = a - even :)
2
回复
leondu 说:
2008年5月11日 09:48
a = [1,2,3,4,5,6,7,8]
even = a.select {|x| x % 2 == 0}
odd = a - even


刚刚格式乱了

3
回复
Head_small
galeki 说:
2008年5月11日 12:23

这方法也不错,就是这样的话,重复的元素也被去掉了。

4
回复
leondu 说:
2008年5月22日 11:11

惭愧,昨天翻了下the ruby way, 发现ruby自己已经实现了seperate方法,不过名字叫partition:

irb(main):001:0> a=[1,2,3,4,5,6]
=> [1, 2, 3, 4, 5, 6]
irb(main):002:0> a.partition{|x| x%2==0}
=> [[2, 4, 6], [1, 3, 5]]
irb(main):003:0>
5
回复
Head_small
galeki 说:
2008年5月22日 19:24

原来有这个方法,一直没有发现汗……


* 登录
*

simple_captcha.jpg
(输入验证码)