gpt4 book ai didi

ruby - 如何将数组中的多个对象铲到一个对象中?

转载 作者:行者123 更新时间:2023-12-04 05:08:56 25 4
gpt4 key购买 nike

我有一个 Team类(class):

class Team
attr_accessor :teamplayers
def initialize
@team_players = []
end
def <<(player)
@team_players << player
end
def to_s
puts "THIS IS THE TEAM #{@team_players}"
end
end

我想通过 << 向团队添加成员.我使用此代码:
team << @goalkeepers.last
team << @defenders[-1..-4]
team << @midfielders[-1]
team << @attackers[-1..-2]

第一行工作正常,并向团队添加了一名成员。然而,其他行向我的团队添加数组,而不是实际成员。

那么如何单独添加成员呢?

最佳答案

team << @defenders[-1..-4]

您正在另一个数组中添加一个数组 ( @defenders[-1..-4] )。自然,添加的实际元素将是整个数组,Ruby 不会自动为您展平它。

如果您不想这样做,您可以连接 << 中的元素。方法,如果它们是一个数组:
def <<(player)
if player.kind_of?(Array)
@team_players.concat player
else
@team_players << player
end
end

您也可以在每次添加内容时展平数组:
def <<(player)
@team_players << player
@team_players.flatten!
end

这将适用于单个对象和数组。例如:
irb(main):032:0> t << ["Bob"]
=> ["Bob"]
irb(main):032:0> t << ["Alice", "Joe"]
=> ["Bob", "Alice", "Joe"]
irb(main):033:0> t << ["Bill"]
=> ["Bob", "Alice", "Joe", "Bill"]

剩下的问题是您是否要覆盖方式 <<通常有效,如果这样做不是更好的主意 @defenders[-1..-4].each { |d| team << d } .

关于ruby - 如何将数组中的多个对象铲到一个对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15134536/

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