【问题标题】:how to use the method each_with_index in ruby, I wanna change the index of a given array [closed]如何在ruby中使用each_with_index方法,我想更改给定数组的索引[关闭]
【发布时间】:2014-07-31 05:09:20
【问题描述】:

我想改变给定数组的索引:

arr = ["cat", "tiger", "lion"]

所以 lion-item 的值为 5-index,tiger 的值为 4-index,cat-item 的值为 3

这可能吗?

谢谢!

【问题讨论】:

  • 结果应该如何? [nil,nil,nil,"cat", "tiger", "lion"]?
  • @UriAgassi 相同的订单,但使用另一个订单索引,如果你知道我的意思是从 3 开始?
  • 显然,sawa 知道你的意思;-)
  • 我认为不清楚,他想基于另一个索引访问元素,因此他不必每次都转换索引。例如:arr[3] #=> 'cat'.

标签: ruby


【解决方案1】:

each_with_index 无法做到这一点,但with_index 可以做到这一点。

arr.each.with_index(3) do |e, i|
  ...
end

【讨论】:

  • Yes.it is.. 但是 OP 的输出并不清楚。 :)
【解决方案2】:

是的,您可以创建一个索引方法来访问它。

def get_by_index(array, value)
  array[value-3]
end

您还可以创建一个继承自数组的新数组子类并重新定义方括号方法,如下所述:

How does defining [square bracket] method in Ruby work?

【讨论】:

    【解决方案3】:

    您可以使用Hash

    hash = {
      3 => "cat",
      4 => "tiger",
      5 => "lion"
    }
    
    hash[4]
    #=> "tiger"
    

    如果你想从一个数组转换为一个哈希,你可以这样做:

    arr = ["cat", "tiger", "lion"]
    hash = Hash[arr.each_with_index.map{|v,i| [i+3, v] }]
    #=> {"cat"=>3, "tiger"=>4, "lion"=>5}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 2013-10-11
      • 2016-02-23
      相关资源
      最近更新 更多