मेरे पास एक रूबी सरणी है जिसमें डुप्लिकेट तत्व हैं।
array = [1,2,2,1,4,4,5,6,7,8,5,6]
बिना लूप और पुनरावृत्ति का उपयोग किए बिना सभी अद्वितीय तत्वों को बनाए रखते हुए मैं इस सरणी से सभी डुप्लिकेट तत्वों को कैसे निकाल सकता हूं?
मेरे पास एक रूबी सरणी है जिसमें डुप्लिकेट तत्व हैं।
array = [1,2,2,1,4,4,5,6,7,8,5,6]
बिना लूप और पुनरावृत्ति का उपयोग किए बिना सभी अद्वितीय तत्वों को बनाए रखते हुए मैं इस सरणी से सभी डुप्लिकेट तत्वों को कैसे निकाल सकता हूं?
जवाबों:
array = array.uniq
uniq
सभी डुप्लिकेट तत्वों को निकालता है और सरणी में सभी अद्वितीय तत्वों को बरकरार रखता है।
यह रूबी भाषा की कई सुंदरियों में से एक है।
[{how: "are"}, {u:"doing"}, {how: "are"}].uniq => [{:how=>"are"}, {:u=>"doing"}]
.uniq!
यह ऑब्जेक्ट पर ही काम करता है
आप चौराहा वापस कर सकते हैं।
a = [1,1,2,3]
a & a
इससे डुप्लिकेट भी डिलीट हो जाएगा।
a | a
(संघ) का उपयोग करना एक ही चाल होगी।
आप डुप्लिकेट तत्वों को यूनीक विधि से हटा सकते हैं:
array.uniq # => [1, 2, 4, 5, 6, 7, 8]
यह जानने के लिए भी उपयोगी हो सकता है कि uniq
ब्लॉक है, इसलिए यदि आपके पास चाबियों का एक समूह है:
["bucket1:file1", "bucket2:file1", "bucket3:file2", "bucket4:file2"]
और आप जानना चाहते हैं कि अनोखी फाइलें क्या हैं, आप इसे इसके साथ देख सकते हैं:
a.uniq { |f| f[/\d+$/] }.map { |p| p.split(':').last }
uniq
एक ब्लॉक के बिना उस ऐरे को भेजने से वैसा ही मान वापस आएगा जैसा कि आपके ब्लॉक के साथ होता है।
अगर किसी को परवाह है तो बस एक और विकल्प।
आप to_set
एक सरणी की विधि का भी उपयोग कर सकते हैं जो एरे को सेट में परिवर्तित करता है और परिभाषा के अनुसार, सेट तत्व अद्वितीय हैं।
[1,2,3,4,5,5,5,6].to_set => [1,2,3,4,5,6]
to_set
तो 4 वस्तुओं का आवंटन करेंगे, जबकि uniq
एक को आवंटित करेंगे ।
यदि कोई दोहराया मूल्यों के सभी उदाहरणों को हटाने के लिए एक रास्ता खोज रहा था, तो " मैं एक रूबी सरणी में दोहराया तत्वों को कुशलता से कैसे निकाल सकता हूं? " देखें।
a = [1, 2, 2, 3]
counts = Hash.new(0)
a.each { |v| counts[v] += 1 }
p counts.select { |v, count| count == 1 }.keys # [1, 3]
a = [1, 2, 2, 3] a.find_all { |x| a.count(x) == 1 } # [1, 3]
बस कुछ जानकारी प्रदान करने के लिए:
require 'fruity'
require 'set'
array = [1,2,2,1,4,4,5,6,7,8,5,6] * 1_000
def mithun_sasidharan(ary)
ary.uniq
end
def jaredsmith(ary)
ary & ary
end
def lri(ary)
counts = Hash.new(0)
ary.each { |v| counts[v] += 1 }
counts.select { |v, count| count == 1 }.keys
end
def finks(ary)
ary.to_set
end
def santosh_mohanty(ary)
result = ary.reject.with_index do |ele,index|
res = (ary[index+1] ^ ele)
res == 0
end
end
SHORT_ARRAY = [1,1,2,2,3,1]
mithun_sasidharan(SHORT_ARRAY) # => [1, 2, 3]
jaredsmith(SHORT_ARRAY) # => [1, 2, 3]
lri(SHORT_ARRAY) # => [3]
finks(SHORT_ARRAY) # => #<Set: {1, 2, 3}>
santosh_mohanty(SHORT_ARRAY) # => [1, 2, 3, 1]
puts 'Ruby v%s' % RUBY_VERSION
compare do
_mithun_sasidharan { mithun_sasidharan(array) }
_jaredsmith { jaredsmith(array) }
_lri { lri(array) }
_finks { finks(array) }
_santosh_mohanty { santosh_mohanty(array) }
end
कौन सा, कब चलाया जाता है:
# >> Ruby v2.7.1
# >> Running each test 16 times. Test will take about 2 seconds.
# >> _mithun_sasidharan is faster than _jaredsmith by 2x ± 0.1
# >> _jaredsmith is faster than _santosh_mohanty by 4x ± 0.1 (results differ: [1, 2, 4, 5, 6, 7, 8] vs [1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, ...
# >> _santosh_mohanty is similar to _lri (results differ: [1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, 7, 8, 5, 6, 1, 2, 1, 4, 5, 6, ...
# >> _lri is similar to _finks (results differ: [] vs #<Set: {1, 2, 4, 5, 6, 7, 8}>)
नोट: ये खराब परिणाम लौटाए:
lri(SHORT_ARRAY) # => [3]
finks(SHORT_ARRAY) # => #<Set: {1, 2, 3}>
santosh_mohanty(SHORT_ARRAY) # => [1, 2, 3, 1]
अंतर्निहित कार्यों का उपयोग किए बिना, XOR ऑपरेटर का उपयोग करने का प्रयास करें:
a = [3,2,3,2,3,5,6,7].sort!
result = a.reject.with_index do |ele,index|
res = (a[index+1] ^ ele)
res == 0
end
print result
अंतर्निहित कार्यों के साथ:
a = [3,2,3,2,3,5,6,7]
a.uniq
.sort!
भी एक इनबिल्ट फंक्शन नहीं है?