首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自动计数器的Ruby中的每一个?

自动计数器的Ruby中的每一个?
EN

Stack Overflow用户
提问于 2009-02-10 19:40:53
回答 8查看 77.8K关注 0票数 136

我想使用一个for-each和一个计数器:

代码语言:javascript
复制
i=0
for blah in blahs
    puts i.to_s + " " + blah
    i+=1
end

有没有更好的方法呢?

注:我不知道blahs是一个数组还是一个哈希,但是必须做blahs[i]并不会让它更有吸引力。另外,我想知道如何用Ruby语言编写i++

从技术上讲,Matt和Squeegy的答案排在第一位,但我对paradoja给出了最好的答案,所以分散了一些观点。他的回答中也提到了版本,这仍然是相关的(只要我的Ubuntu 8.04使用的是Ruby 1.8.6)。

应该使用puts "#{i} #{blah}",它要简洁得多。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-02-10 19:57:07

正如人们所说,您可以使用

代码语言:javascript
复制
each_with_index

但是,如果您希望使用不同于"each“的迭代器的索引(例如,如果您希望映射到索引或类似的东西),您可以使用each_with_index方法连接枚举器,或者简单地使用with_index:

代码语言:javascript
复制
blahs.each_with_index.map { |blah, index| something(blah, index)}

blahs.map.with_index { |blah, index| something(blah, index) }

这是你可以在ruby 1.8.7和1.9中做的事情。

票数 193
EN

Stack Overflow用户

发布于 2009-02-10 19:46:54

代码语言:javascript
复制
[:a, :b, :c].each_with_index do |item, i|
  puts "index: #{i}, item: #{item}"
end

你不能用for做这件事。无论如何,我通常喜欢对每个人进行更具声明性的调用。部分原因是当您达到for语法的限制时,它很容易转换为其他形式。

票数 55
EN

Stack Overflow用户

发布于 2009-02-10 19:46:15

是的,先用collection.each来做循环,然后用each_with_index来获取索引。

你可能应该读一本Ruby的书,因为这是Ruby的基础,如果你不知道它,你会有大麻烦的(试试:http://poignantguide.net/ruby/)。

取自Ruby源代码:

代码语言:javascript
复制
 hash = Hash.new
 %w(cat dog wombat).each_with_index {|item, index|
   hash[item] = index
 }
 hash   #=> {"cat"=>0, "wombat"=>2, "dog"=>1}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/533837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档