我们有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
的第二个索引?
答案 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。