gpt4 book ai didi

c - 人们一直告诉我我正在用 ruby​​ 写 "C style iterators",我应该用其他方式来做,没有 i++ 东西

转载 作者:太空宇宙 更新时间:2023-11-03 17:57:09 24 4
gpt4 key购买 nike

这里的细节并不重要,这只是一个例子,重要的是 i=0, i+=1 Action

def sortAndIndex
#sorting keys
@disco = Hash[@disco.sort]

#basic setup for both input types
@years = @disco.keys
@albums = @disco.values
sum = @years.count

#setup for "albums" input
@allalbums = []
i = 0
sum.times do
thatyear = @years[i] + ", " + @albums[i]
@allalbums << thatyear
i += 1
end
end

现在这确实有效,就像 ruby​​ 或大多数其他语言中的任何其他“i++”类型(“C 风格”)迭代器一样。然而,我一直听说 ruby​​ 有更好的方法来做到这一点,基本上我会传递第二个参数变量,而不是这里的 'a'。

我会做哪些修改来做到这一点,ruby 是否有多个“快捷方式”涉及这些类型的 i++ ary[i] 迭代器问题?

最佳答案

是的,您应该以“Ruby 方式”做事而忘掉索引。为什么?因为它是惯用的并且看起来更好。您传入要在集合的每个元素上执行的代码块。元素如何存储,以什么顺序存储,如果它们可以被索引,都是无关紧要的。

# nice, eh?
some_array.each do |elem|
some_action(elem)
end

如果您需要一个索引计数器(在您的示例中不需要),请使用 each_with_index相反。

另请注意,除了迭代集合之外, block 的概念在 Ruby 中很重要。你有什么......奇怪......你应该听他们说,但许多方法将 block 作为参数(或可选参数),它们不返回可以索引的集合。例如,File.open获取一个 block ,如果提供,则在 block 返回时为您关闭文件

还有一点要注意;您的命名约定对于 Ruby 来说是不典型的。 Rubyists 使用小写函数和变量名 underscores_between_words .最好留在此处的社区。

关于c - 人们一直告诉我我正在用 ruby​​ 写 "C style iterators",我应该用其他方式来做,没有 i++ 东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11403712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com