سؤال

هذا السؤال لديه بالفعل إجابة هنا:

افترض أن لدي رمز الياقوت التالي:

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.

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

من منشور سابق ،

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
def f a,b
    tmp  = a.map(|i| b.include?(i))
    tmp.include?(false)
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top