Ruby array.each具有非唯一整数值

时间:2018-10-13 10:23:04

标签: arrays ruby

我们有array = [4, 2, 9, 11, 2, 16]

那么我们有

indexes = []
for i in array do 
    if i > 0 then indexes << array.find_index(i) else next end 
end

打印出结果时返回 [0, 1, 2, 3, 1, 5]

问题出在第四个索引上。应该为4,但是为1,这是因为array的索引1和4具有相同的值(即2)。

不是for循环(或.each)要一一遍历所有元素吗?为什么会这样呢?为什么它两次提取array的第二个索引?

2 个答案:

答案 0 :(得分:2)

import random import time filesize = 11251 offset = random.randrange(filesize) words = [] print("Welcome to the music guessing game") def randomsong(): file = open("musicFile.csv","r") file.seek(offset) file.readline() line =file.readline() data = line.split(",") print (data[0], data[1]) song = data[1] song = str(song) print(song) guesses = 2 Score = 0 song = song.lower() while guesses != 0: yourguess = input ("Guess the name of the song") if yourguess == song: print ("Well Done!") else: print ("Incorrect, try again ") guesses = guesses -1 print("Game Over!!!") randomsong() 返回array.find_index中与传递的值匹配的元素的第一个索引。

如果您要查找要查找的值的索引,则应使用each_with_index进行迭代:

array

或更紧凑(仅分配一个数组):

indexes = []
array.each_with_index do |value, index|
  indexes << index if value > 0
end

或允许进行多次分配:

indexes = array.each_with_object([]).with_index {|(v, o), i| o << v if i > 0 }

或者:

indexes = array.map.with_index {|v, i| v > 0 ? i : nil }.compact

答案 1 :(得分:1)

因为Array#find_index返回它在数组中找到的第一个元素的索引。

  

返回ary中第一个对象的索引,以使对象==到obj。