2010-10-09 12 views
17

मान लीजिए मैं निम्नलिखित रूबी कोड है:रूबी: सरणी सरणी में निहित किसी भी क्रम

array_1 = ['a', 'b'] 
array_2 = ['a', 'b', 'c'] 

some_function(array_1, array_2) # => True 
some_function(array_2, array_1) # => False 
some_function(['a', 'b'], ['a', 'd']) # => False 
some_function(['x', 'y'], array_2) # => False 

मैं काफी some_function रहा हूँ यह सच है वापस जाने के लिए जब पैरामीटर 2 पैरामीटर 1 में सभी तत्वों के शामिल ।

उत्तर

42
def f a,b 
    (a-b).empty? 
end 
+0

बहुत बढ़िया। बहुत बहुत धन्यवाद! – Mike

+5

मुझे रूबी के बारे में क्या पसंद है - इतना संक्षिप्त, समझदार और पठनीय। –

+0

विवा रूबी ...: डी –

-2
def f a,b 
    tmp = a.map(|i| b.include?(i)) 
    tmp.include?(false) 
end 
1

एक पिछली पोस्ट से,

def f a,b 
    (a-b).empty? 
end 

, जिस तरह से आप उम्मीद कर काम नहीं करेगा उदाहरण के लिए:

a1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
a2 = [2, 3, 5, 9] 

(a1-a2).empty? # returns true 

हालांकि,

a1-a2 # returns [1, 4, 6, 7, 8], not empty 

इस प्रकार f रिटर्न झूठी।

एक अधिक सटीक समाधान, अगर आप चाहते हैं एक एक लाइनर होगा:

def f a,b 
    a&b == b 
end 

a&b सभी तत्वों है कि दोनों a और b में हैं वापसी तो हम है कि अगर b

के बराबर है देखने के लिए जाँच करेगा

अस्पष्टता खातिर:

def f a,b 
    (a&b == a) || (a&b == b) 
end 
+0

ऐसा इसलिए है क्योंकि आपको पहले स्थान पर बड़ी सरणी डालना चाहिए। लेखक वास्तव में पूछता है कि सरणी 'ए'' बी' का उप-समूह है या नहीं। जाहिर है, आपके उदाहरण में 'ए 1' 'ए 2' –

+0

' ए 1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] का सबसेट नहीं है; 'ए 2 = [2, 3, 5, 9]'; '(ए 1-ए 2) .empty?' # => 'झूठा' देता है !! ; क्या मैंने कुछ गलत किया या आपने किया ?? – Djunzu

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