2012-06-11 14 views
7

मुझे पता है कि मैं इसे कुछ चरणों में कर सकता हूं, लेकिन यह सोच रहा था कि कोई ऐसा कार्य है जो इसे प्राप्त कर सकता है।क्या पुनर्प्राप्त करने के लिए कोई विशेष फ़ंक्शन है तो यादृच्छिक सरणी तत्व हटाएं?

मैं # नमूना सरणी करना चाहता हूं, फिर पुनर्प्राप्त तत्व को हटा दें।

उत्तर

25

कैसे इस बारे में:

array.delete_at(rand(array.length)) 
+0

यह अनिवार्य रूप से दो है चरण ('रैंड (सरणी। लम्बाई)' और 'array.delete_at (idx)')। ओपी ने केवल एक विधि के लिए कहा था, लेकिन शायद रूबी में इस तरह के ऑपरेशन करने के सबसे सरल तरीकों में से एक है। – sindrenm

2

Linuxios की है यह एकदम सही है।

array = %w[A B C] 
item_deleted = array.delete_at(1) 

यहाँ यह आईआरबी में है: यहाँ एक और उदाहरण है

1.9.2p0 :043 > array = %w[A B C] 
=> ["A", "B", "C"] 
1.9.2p0 :044 > item_deleted = array.delete_at(1) 
=> "B" 
1.9.2p0 :045 > array 
=> ["A", "C"] 
1.9.2p0 :047 > item_deleted 
=> "B" 
+1

अतिरिक्त उदाहरणों के लिए धन्यवाद। – Linuxios

1

रैंड (array.length) दृष्टिकोण पहले ही उल्लेख के लिए एक वैकल्पिक, यह एक

element = array.delete array.sample 

हो सकता है उदाहरण:

>> array = (1..10).to_a 
>> element = array.delete array.sample 
>> array # => [1, 2, 4, 5, 6, 7, 8, 9, 10] 
>> element # => 3 

यह दो संचालन का एक सेट भी है, लेकिन कम से कम आपको सरणी से दूर नहीं जाना पड़ेगा।

+1

यह दूसरों की तुलना में कम कुशल हो सकता है (हटाएं एक खोज की आवश्यकता है) लेकिन यह एक नज़र में यह स्पष्ट है कि यह क्या कर रहा है। – micapam

+0

यह सच है, लेकिन मुझे लगता है कि यह 'रैंड' का उपयोग करने से थोड़ा अधिक पठनीय है, क्योंकि पहले से ही एक सरणी में एक यादृच्छिक तत्व खोजने का एक तरीका है। इसके अलावा, हमें सरणी की लंबाई में खींचने की ज़रूरत नहीं है, जो कुछ है जिसे हमें वास्तव में परवाह करने की आवश्यकता नहीं है। :-) – sindrenm

+0

हां - 'स्पष्ट' से मेरा मतलब पठनीय था :) – micapam

11

एक और अक्षम एक है, लेकिन सुपर स्पष्ट क्या हो रहा है:

class Array 
    def sample! 
    delete_at rand length 
    end 
end 
+3

नीचे पंक्ति: आपके दूसरे उदाहरण की तरह कुछ (हालांकि उस भाषा में जिसमें दुभाषिया लागू किया गया है) कोर ऐरे कार्यान्वयन का हिस्सा होना चाहिए। मैं शायद इसे 'delete_sample!' या कुछ ऐसा कहूंगा, जैसा कि मुझे लगता है कि यह थोड़ा और स्पष्ट है कि यह क्या करता है। :-) – sindrenm

+1

इसे array.shuffle! .pop – seo

+3

होने की आवश्यकता है यदि आप इस विकल्प के लिए जाते हैं, और आप मूल सरणी से आइटम को हटाना चाहते हैं तो आप बेहतर 'array.shuffle! .pop' करते हैं, या फिर आपकी सरणी रहेगी जैसा था। बैंग (!) के बिना 'शफल' करना आपको 'पॉप' से एक और सरणी देगा। – mjnissim

0

हैं:

array.shuffle.pop 

क्या अच्छा होगा सरणी ही है, की तरह कुछ पर नमूना विधि का एक विनाशकारी संस्करण होगा आपको कई वस्तुओं का नमूना देने और मूल सरणी से निकालने की आवश्यकता है:

array = (1..10).to_a 

=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

grab = array.sample(4) 

=> [2, 6, 10, 5] 

grab.each{ |a| array.delete a } 

=> [2, 6, 10, 5] 

array 
=> [1, 3, 4, 7, 8, 9] 
+1

यह केवल तभी काम करता है जब आपकी मूल सरणी अद्वितीय मानों से भरी हो, अन्यथा आप सभी '2' को हटा देंगे – Anthony

संबंधित मुद्दे

 संबंधित मुद्दे