- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个具有以下模型的 Rails 5.1 应用程序:
class Game < ApplicationRecord
has_and_belongs_to_many :players
end
class Player < ApplicationRecord
has_and_belongs_to_many :games
end
我在测试期间(使用标准装置 + minitest)在 Game
的方法之一中看到以下行为:
def foo
puts "players.first: #{players.first.id}, #{players.first.name}"
puts "players.second: #{players.second.id}, #{players.second.name}"
puts "players.last: #{players.last.id}, #{players.last.name}"
players.each_cons(2) do |pair|
puts "<<each_cons>> one: #{pair.first.id}, #{pair.first.name} - two: #{pair.second.id}, #{pair.second.name}"
end
end
输出:
players.first: 101088061, julia
players.second: 132733334, clara
players.last: 931424614, felix
<<each_cons>> one: 931424614, felix - two: 132733334, clara
<<each_cons>> one: 132733334, clara - two: 101088061, julia
我希望使用 julia, clara
然后是 clara, felix
调用它。这种相反顺序的原因是什么?
最佳答案
当您调用 players.first
时您可能会收到一个查询,该查询选择带有 order by "players"."id" ASC LIMIT 1
的玩家.
当您调用 second
时你可能会得到 order by "players"."id" ASC LIMIT 1 OFFSET 1
.
当您调用 players
时您没有应用此顺序。
如果这不是你想要的行为,那么定义:
@players = players.order(:id)
... 然后 @players.first
和 @players.second
将给出与您从 @players
获得的顺序一致的值因为您将使用 first
的数组实现和 second
.
检查 SQL 语句的日志以确定。
关于ruby-on-rails - each_cons(2) 的对顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45001617/
我一直在做a kata on CodeWars ,其摘要是取一个数字并返回 "Jumping!!" 如果数字在 1 以内(例如 2345、4323 , 7898) 和 "Not!!" 否则。所有单个数
下面抛出一个LocalJumpError records.find_each.each_cons(3) 是否有内置方法在内存友好的批处理中使用 each_cons? 编辑: 理想情况下,重叠会跨越批处
我只想对数组中的连续元素应用二元运算,例如: [1, 2, 3, 4].each_cons(2).map { |a, b| a.quo(b) } #=> [(1/2), (2/3), (3/4)] 这
我有一个具有以下模型的 Rails 5.1 应用程序: class Game > one: #{pair.first.id}, #{pair.first.name} - two: #{pair.sec
是否有与 Ruby 的 #each_cons 等效的 Pythonic? 在 Ruby 中你可以这样做: array = [1,2,3,4] array.each_cons(2).to_a => [[
ruby Ruby 有 each_cons可以这样使用 class Pair def initialize(left, right) @left = left
很多语言都问过这个问题,但 javascript 却没有。 Ruby 有方法 Enumerable#each_cons看起来像这样: puts (0..5).each_cons(2).to_a # [
在执行each block 时是否可以跳过n 次迭代? persons.each_cons(2) do |person| if person[0] == person[1] #SKIP 2
如何在 Clojure 中重写这段 Ruby 代码? seq = [1, 2, 3, 4, 5].each_cons(2) #=> lazy Enumerable of pairs seq.to_a
我是一名优秀的程序员,十分优秀!