设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3799|回复: 9
打印 上一主题 下一主题

[已经解决] 从5个数中取出最小的3个非0数的索引

[复制链接]

Lv1.梦旅人

梦石
0
星屑
65
在线时间
84 小时
注册时间
2008-3-31
帖子
88
跳转到指定楼层
1
发表于 2013-6-27 19:50:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
arr = [?,?,?,?,?]
已知arr有5个数字元素,有可能出现0,从中取出最小的3个非0数的索引
如果有2个或以上0则取全部非0元素

def getNum
      str = []
      ob = arr
      ob.delete(0)
      if ob.size >3
          这里要怎么写...不会....
     else
          arr.each_index{|i|
              str.push(i) if arr[i] != 0
          }
     end
     return str
end

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

2
发表于 2013-6-27 20:06:14 | 只看该作者
本帖最后由 Sion 于 2013-6-27 20:22 编辑
  1. new_array = []
  2. array.sort.each {|i|
  3.   next if i == 0
  4.   new_array.push(i)
  5.   break if new_array.size == 3
  6. }
复制代码
...终于改对了


- -b 不对,才发现你要的是索引 啊啊啊啊啊啊.......

那就加这个吧
  1. array_new = []
  2. new_array.each {|i| array_new.push(array.index(i))}
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
84 小时
注册时间
2008-3-31
帖子
88
3
 楼主| 发表于 2013-6-27 20:26:08 | 只看该作者
Sion 发表于 2013-6-27 20:06
...终于改对了

怪不得刚才看不懂了....
现在可以了...
谢谢哈~{:2_277:}
研究中...
要弄清楚原理...

点评

你那个写法 arr 要 clone 一下,不然还是会破坏原数据  发表于 2013-6-27 20:30
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
84 小时
注册时间
2008-3-31
帖子
88
4
 楼主| 发表于 2013-6-27 20:30:26 | 只看该作者
Sion 发表于 2013-6-27 20:06
...终于改对了

还请教一下
你之前的代码中有的
<=>
这符号是什么意思,怎么用的
帮助文档都没有说明....

点评

http://ruby-doc.org/core-1.9.3/Fixnum.html#method-i-3C-3D-3E, 我写的那段还有点bug,一会写好了再发给你。  发表于 2013-6-27 20:40
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
84 小时
注册时间
2008-3-31
帖子
88
5
 楼主| 发表于 2013-6-27 20:40:40 | 只看该作者
Sion 发表于 2013-6-27 20:06
...终于改对了


假如....arr是5个相同的非0数值.....
那么最后得到的是....[0,0,0]
{:2_270:}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
84 小时
注册时间
2008-3-31
帖子
88
6
 楼主| 发表于 2013-6-27 20:48:52 | 只看该作者
490832999 发表于 2013-6-27 20:40
假如....arr是5个相同的非0数值.....
那么最后得到的是....[0,0,0]

暂时解决....针对元素均为整数情况

#array = [5,5,5,5,5]
array = [58,0,32,32,7]

new_array = []
array.each_index {|i|
  new_array.push(0.1*i+array)
}

array_new = []
new_array.sort.each{|i|
  next if i.to_i == 0
  array_new.push(new_array.index(i))
  break if array_new.size == 3
}

msgbox array_new
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

7
发表于 2013-6-27 20:54:22 | 只看该作者
  1. array_new = []
  2. array.each_with_index {|a, i| array_new.push([a, i]) if a != 0}
  3. array_new.sort!
  4. array_new.pop while array_new.size > 3
  5. return array_new.collect {|a| a[1]}
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
135 小时
注册时间
2013-6-10
帖子
29
8
发表于 2013-6-27 21:22:38 | 只看该作者
最后的答案应该是string或是array?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
84 小时
注册时间
2008-3-31
帖子
88
9
 楼主| 发表于 2013-6-27 21:24:31 | 只看该作者
Sion 发表于 2013-6-27 20:54

好了

就这个each_with_index......帮助也没...你给的网站也没找到...
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

10
发表于 2013-6-27 21:41:38 | 只看该作者
本帖最后由 Sion 于 2013-6-27 21:43 编辑
490832999 发表于 2013-6-27 21:24
好了

就这个each_with_index......帮助也没...你给的网站也没找到...


那网站上好像漏了,block 里的两个参数分别是元素与元素的索引。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 04:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表