當字符串模式時,是否可以對不同枚舉項進行「求和」? 每個例子是這樣的? (當然,我知道這是行不通的。)如何在Ruby中「枚舉」可枚舉項
(('a'..'z') + ('A'..'Z')).to_a
注: 我問有關獲取串字符數組,從a到z和從A到Z的所有在一起。 關於字符串模式我的意思是字符會出現像[「a」,「b」,.....,「Y」,「Z」]
當字符串模式時,是否可以對不同枚舉項進行「求和」? 每個例子是這樣的? (當然,我知道這是行不通的。)如何在Ruby中「枚舉」可枚舉項
(('a'..'z') + ('A'..'Z')).to_a
注: 我問有關獲取串字符數組,從a到z和從A到Z的所有在一起。 關於字符串模式我的意思是字符會出現像[「a」,「b」,.....,「Y」,「Z」]
喜歡這個?
[('a'..'z'), ('A'..'Z')].map(&:to_a).flatten
或者這個?
('a'..'z').to_a + ('A'..'Z').to_a
'[('A'..'Z'),('a'。 .'z')]。flat_map(&:to_a)'更短;) – 2014-11-21 12:36:10
你說得對。我總是忘記'flat_map' ... – spickermann 2014-11-21 12:40:45
不幸的是,根據更新後的問題,這個答案不再正確。 – 2014-11-21 13:36:10
沒有回答,但答案的標杆:
require 'benchmark'
n = 100000
Benchmark.bm do |x|
x.report("flat_map : ") { n.times do ; [('A'..'Z'), ('a'..'z')].flat_map(&:to_a) ; end }
x.report("map.flatten: ") { n.times do ; [('A'..'Z'), ('a'..'z')].map(&:to_a).flatten ; end }
x.report("splat : ") { n.times do ; [*('A'..'Z'), *('a'..'z')] ; end }
x.report("concat arr : ") { n.times do ; ('A'..'Z').to_a + ('a'..'z').to_a ; end }
end
結果:
#=> user system total real
#=> flat_map : 0.858000 0.000000 0.858000 ( 0.883630)
#=> map.flatten: 1.170000 0.016000 1.186000 ( 1.200421)
#=> splat : 0.858000 0.000000 0.858000 ( 0.857728)
#=> concat arr : 0.812000 0.000000 0.812000 ( 0.822861)
不幸的是,根據更新後的問題,這個答案不再正確。 – 2014-11-21 13:36:29
你爲什麼這麼說?所有四個選項對於所提問題的目的都是一樣的。 – RadW2020 2014-11-21 17:55:45
@ RadW2020:那麼,你改變了你的問題,詢問與你之前完全相反的順序。當我寫下我的答案並寫下評論時,您的問題問到如何以相反的順序獲取數組。現在,你的問題問如何讓他們按照他們出現的順序。當然,在你做出這些改變之前所寫的任何內容都將毫無意義。 – 2014-11-22 12:02:56
由於要從要素第一Range
是在輸出Array
的年底和的元素最後Range
是在開始輸出Array
的,但仍保持內各Range
相同的順序,我會做這樣的(這也很好地推廣到兩個以上Enumerable
S):
def backwards_concat(*enums)
enums.reverse.map(&:to_a).inject([], &:concat)
end
backwards_concat('A'..'Z', 'a'..'z')
['a'..'z'].concat(['A'..'Z'])
這可能是歸仁最簡單的方法來做到這一點。
這是錯的。這是你的輸出「a..zA..Z」。 concat是用於字符串的。 – RadW2020 2014-11-21 17:44:13
關於字符串模式我的意思是會出現像字符[ 「A」, 「B」,..., 「Y」, 「Z」]
爲了回答上述:
Array('a'..'z').concat Array('A'..'Z')
您的預期結果是什麼? 52個元素(所有大寫和小寫字母)的數組? – 2014-11-21 12:17:21
是的。類似的東西。 – RadW2020 2014-11-21 12:50:19
預期輸出是什麼?你在問如何解除兩個'Enumerable'的加法運算嗎?什麼是「字符串模式」? – 2014-11-21 12:57:16