ओपी का प्रश्न, जैसा कि अन्य उत्तरों में उल्लेख किया गया है, दो ऑपरेटरों की तुलना कर रहा है जो विभिन्न उद्देश्यों को पूरा करते हैं। एक, concat
, जो मूल सरणी (mutates) को मूल सरणी, और +
है जो विनाशकारी (शुद्ध कार्यात्मक, कोई उत्परिवर्तन) नहीं है।
मैं यहां एक और तुलनीय परीक्षण की तलाश में आया, उस समय महसूस नहीं कर रहा था, कि कंसट विनाशकारी था। यदि यह दो पूर्ण रूप से कार्यात्मक, गैर-विनाशकारी परिचालनों की तुलना करने के लिए दूसरों के लिए उपयोगी है, तो यहां सरणी विस्तार (array1 + array2
) बनाम सरणी विस्तार ([*array1, *array2]
) का बेंचमार्क है। दोनों, जहां तक मुझे पता है, परिणामस्वरूप 3 सरणी बनाई जा रही हैं: 2 इनपुट सरणी, 1 नया परिणामी सरणी।
संकेत: +
जीतता है।
कोड
# a1 is a function producing a random array to avoid caching
a1 = ->(){ [rand(10)] }
a2 = [1,2,3]
n = 10_000_000
Benchmark.bm do |b|
b.report('expand'){ n.times{ [*a1[], *a2] } }
b.report('add'){ n.times{ a1[]+a2 } }
end
परिणाम
user system total real
expand 9.970000 0.170000 10.140000 (10.151718)
add 7.760000 0.020000 7.780000 ( 7.792146)
स्रोत
2017-04-26 05:36:44
FYI करें :) http://www.ruby-doc.org/stdlib-1.9.3/libdoc/benchmark/rdoc /Benchmark.html –
http://www.joelonsoftware.com/articles/fog0000000319.html – Fuser97381