从另一个Array创建一个Array

Ray*_*eve 2 ruby arrays

我有一个看起来像这样的数组:

Array_1 = ["A1", "A2", "A3", "A4", "A5", "B1", "B2", "B3", ..., "Z5"]
Run Code Online (Sandbox Code Playgroud)

我想创建的元素的数组Array_1是来找"A5":

Array_2 = ["B1", "B2", "B3", ..., "Z5"]
Run Code Online (Sandbox Code Playgroud)

我有一种丑陋的方式,减去两个数组来创建第三个数组,但我觉得必须有一种优雅的红宝石方式来做一些应该简单的事情.任何帮助都是令人惊讶的.

Car*_*and 7

Array_1 = ["A1", "A2", "A3", "A4", "A5", "B1", "B2", "B3", "Z5"]

Array_1[Array_1.index("A5")+1..-1]
  # => ["B1", "B2", "B3", "Z5"] 
Run Code Online (Sandbox Code Playgroud)

(我想我们应该首先计算idx = Array_1.index("A5")以确保它是非零的.)

...

另一种方法是使用Ruby的少用触发器操作符:

Array_1.select { |e| e=="A5" .. false ? true : false }[1..-1]
  #=> ["B1", "B2", "B3", "Z5"]
Run Code Online (Sandbox Code Playgroud)

表达保持false直到e=="A5"true,并保持true直到下面的表达式的两个点被true.因此,

Array_1.select { |e| e=="A5" .. false ? true : false }
  #=> ["A5", "B1", "B2", "B3", "Z5"]
Run Code Online (Sandbox Code Playgroud)

[1..-1]被添加以返回此数组而没有"A5".

触发器操作符必须是条件表达式的一部分,这就是我们无法写入的原因:

Array_1.select { |e| e=="A5" .. false }[1..-1]
  #ArgumentError: bad value for range
Run Code Online (Sandbox Code Playgroud)

(因为e=="A5" .. false被视为正常范围).