从另一个Array创建一个Array

时间:2016-06-25 02:43:17

标签: arrays ruby

我有一个如下所示的数组:

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

我想在Array_1之后创建另一个数组"A5"的数组:

Array_2 = ["B1", "B2", "B3", ..., "Z5"]

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

5 个答案:

答案 0 :(得分:7)

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

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

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

即可。 。

另一种方法是使用Ruby很少使用的flip-flop运算符:

Array_1.select { |e| e=="A5" .. false ? true : false }[1..-1]
  #=> ["B1", "B2", "B3", "Z5"]

falsee=="A5"之前,表达式仍为true,并且在两个点后面的表达式为true之前保持true。因此,

Array_1.select { |e| e=="A5" .. false ? true : false }
  #=> ["A5", "B1", "B2", "B3", "Z5"]
已添加

[1..-1]以在没有"A5"的情况下返回此数组。

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

Array_1.select { |e| e=="A5" .. false }[1..-1]
  #ArgumentError: bad value for range

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

答案 1 :(得分:2)

Array_1.slice_when{|e| e == "A5"}.to_a.last
# => ["B1", "B2", "B3", ..., "Z5"]

答案 2 :(得分:2)

这个怎么样?

java -Djavafx.verbose=true -Dbinary.css=false -Djava.util.logging.config.file=target/deployment/standalone/conf/logging.properties -jar target/deployment/standalone/bin/foo.jar --userdir target/userdir

答案 3 :(得分:2)

.slice_after 采用切片数组的参数

 Array_1.slice_after("A5").to_a.last
    => ["B1", "B2", "B3", "Z5"] 

答案 4 :(得分:1)

这将使用正则表达式匹配创建您正在使用的数组。

array = ('A1'..'Z5').to_a.reject { |el| el.match %r/[A-Z][0, 6-9]/ }

然后删除" A(数字)"使用另一个正则表达式匹配的元素。

array_2 = array.select { |el| el.match %r/[B-Z]\d/ }

这样做的另一个好处是不关心订单,无论如何都可以将它们分开。