Ruby中each_with_index vs索引的用例

GNS

Ruby的新手;当我使用数组时,两者之间是有区别的,Enumerable#each_with_index并且Array#index我一直在使用多维数组来尝试查找给定值的位置。当我使用任一代码时,我的代码都能通过所有测试。坐标是我用来保存给定值位置的数组(在本例中为1)

field=[[1,0],[0,0]]
coordinates=[]  
field.each_with_index do |item|
  if item.index(1)
    coordinates.push(field.index(item)).push(item.index(1))
  end
end

在此先感谢您的帮助。

卡里·斯沃夫兰

让我们仔细看看您的代码:

field=[[1,0],[0,0]]
coordindates = []  
field.each_with_index do |item|
  if item.index(1)
    coordinates.push(field.index(item)).push(item.index(1))
  end
end

让:

enum = field.each_with_index
  #=> #<Enumerator: [[1, 0], [0, 0]]:each_with_index>

如您所见,这将返回一个枚举数。

Ruby看到这样的代码:

enum.each do |item|
  if item.index(1)
    coordinates.push(field.index(item)).push(item.index(1))
  end
end

枚举数的元素将由Enumerator#each传递到块中,由于接收者是class的实例,因此它将调用Array#eachfieldArray

enum通过将其转换为数组,我们可以看到的元素

enum.to_a
  #=> [[[1, 0], 0], [[0, 0], 1]]

如您所见,它有两个元素,每个元素都是两个元素的数组,第一个是两个整数的数组,第二个是整数。

我们可以模拟的操作each通过发送枚举#旁边enum和分配块变量返回的值next因为只有一个块变量item,所以我们有:

item = enum.next
  #=> [[1, 0], 0]

那很可能既不是您的期望,也不是您想要的。

接下来,您调用数组#指数item

item.index(1)
  #=> nil

index在数组中搜索item等于的元素1如果找到一个,则返回该元素在数组中的索引。(例如,item.index(0) #=> 1)。既不[1,0]也不是0平等的1index回报nil

让我们倒带(并重新创建枚举器)。您需要两个块变量:

field.each_with_index do |item, index|...

与以下内容相同:

enum.each do |item, index|...

所以现在:

item, index = enum.next
      #=> [[1, 0], 0] 
item  #=> [1, 0] 
index #=> 0 

item.index(1)
  #=> 0

我会让你从这里拿走,但我只想提一件事。我不主张这样做,但是您可以写:

field.each_with_index do |(first, second), index|...

在这种情况下:

(first, second), index = enum.next
       #=> [[1, 0], 0] 
first  #=> 1
second #=> 0 
index  #=> 0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ruby中each_with_index vs索引的用例

来自分类Dev

Ruby的.each_with_index的JS版本

来自分类Dev

Python equivalent of Ruby's each_with_index?

来自分类Dev

使用each_with_index遍历数组而无需单独的索引变量

来自分类Dev

使用each_with_index并为新数组添加具有相应索引的值

来自分类Dev

* 不* 重置熊猫中的 groupby 索引的用例是什么

来自分类Dev

相当于Ruby的each_with_index的Python吗?

来自分类Dev

我在each_with_index块中是什么

来自分类Dev

对地图使用each_with_index

来自分类Dev

python中| =的用例

来自分类Dev

Terraform for_each用例

来自分类Dev

陈述中的用例标签

来自分类Dev

SQL Server中的用例

来自分类Dev

联接中的用例声明

来自分类Dev

SQL Server中的用例

来自分类Dev

查询中的 NVL 用例

来自分类Dev

变量赋值中“and”的用例

来自分类Dev

使用each_with_index和分页来中断循环

来自分类Dev

在一行上运行each_with_index?

来自分类Dev

使用 each_with_index 将项目插入 for 循环,而不是替换

来自分类Dev

什么是使EAVT索引优于EATV的用例?

来自分类Dev

什么是使EAVT索引优于EATV的用例?

来自分类Dev

Java中的单例模式与全局变量用例?

来自分类Dev

在SQL SERVER中的排序和用例

来自分类Dev

在Perl中引用标量的用例?

来自分类Dev

循环测试googletest中的用例

来自分类Dev

机器学习中类别的用例

来自分类Dev

在SQL SERVER中的排序和用例

来自分类Dev

用例在SQL中添加不同的值