Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 基于另一个数组更新一个数组_Ruby_Arrays_Object - Fatal编程技术网

Ruby 基于另一个数组更新一个数组

Ruby 基于另一个数组更新一个数组,ruby,arrays,object,Ruby,Arrays,Object,假设我有 a = ["a","b","c","d","e","f","g"] b = a.map(&:upcase) a.delete("a") print b # right now b = ["A","B","C","D","E","F","G"] # I want b = ["B","C","D","E","F","G"] 我希望b根据a拥有的内容动态更新自身,这样,b最终打印出来时不带“a”,因为“a”已从a中删除。我想把b与a分开;我不想就地修改a(无

假设我有

a = ["a","b","c","d","e","f","g"]
b = a.map(&:upcase)
a.delete("a")

print b # right now b = ["A","B","C","D","E","F","G"]
        # I want    b = ["B","C","D","E","F","G"]
我希望
b
根据
a
拥有的内容动态更新自身,这样,
b
最终打印出来时不带
“a”
,因为
“a”
已从
a
中删除。我想把
b
a
分开;我不想就地修改
a
(无
map!
)。这可能吗?

TL;博士 您似乎想要一个与另一个数组共享成员的从属数组,但显示数组成员的方式不同。你可以用红宝石做这个

创建一个带有“刺伤”Lambda的闭包 有多种方法可以提供具有不同行为的单个数据集的多个表示。然而,对于您的用例来说,定义一个自定义类可能有些过分。我认为将a分配给b是实现您想要的最简单的方法,至少在将a和b视为独立但相连的对象的意义上是如此。考虑:

a = %w[a b c d e f g]
b = ->{ a.map(&:upcase) }
a.delete ?a

b.call
#=> ["B", "C", "D", "E", "F", "G"]

a
#=> ["b", "c", "d", "e", "f", "g"]

仅使用
a.map(&:upcase)
不应就地修改。@撤消OP需要一个共享成员的依赖数组,但以不同方式显示数组成员。内容相同,但行为不同。这可能是一个X/Y问题,但使用Proc或lambda进行最少的仪式肯定是可行的。这非常有趣,非常适合我的目的。非常感谢你。我不得不说,Proc类非常酷。