我有一个如下所示的数组:
Array_1 = ["A1", "A2", "A3", "A4", "A5", "B1", "B2", "B3", ..., "Z5"]
我想在Array_1
之后创建另一个数组"A5"
的数组:
Array_2 = ["B1", "B2", "B3", ..., "Z5"]
我有一种丑陋的方式,减去两个数组来创建第三个数组,但我觉得必须有一种优雅的红宝石方式做一些应该简单的事情。任何帮助都是令人惊讶的。
答案 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"]
在false
为e=="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/ }
这样做的另一个好处是不关心订单,无论如何都可以将它们分开。