2015-07-19 2 views
0

Я понимаю, что массивы содержат данные в организации, и вы можете добавлять, удалять и т. Д. Тем не менее, я не уверен, как структурировать мой код, или если я правильно понимаю это.Как использовать методы массива?

Задача:

describe "no_fruits?" do 
    it "returns false for non-empty array" do 
    ary = ["apple", "banna"] 
    expect(no_fruits?(ary)).to eq(false) 
    end 

    it "returns true for empty array" do 
    ary = [] 
    expect(no_fruits?(ary)).to eq(true) 
    end 
end 

describe "number_of_fruits" do 
    it "returns the number of fruits" do 
    ary1 = ["apple", "banana"] 
    ary2 = ["apple", "papaya", "kiwi"] 
    expect(number_of_fruits(ary1, ary2)).to eq(5) 
    end 
end 

describe "number_of_unique_fruits" do 
    it "returns the number of unique fruits in an array with duplicates" do 
    expect(number_of_unique_fruits(["apple", "apple", "banana", "kiwi"])).to eq(3) 
    end 

    it "returns the number of unique fruits in an array without duplicates" do 
    expect(number_of_unique_fruits(["apple", "banana", "papaya", "kiwi"])).to eq(4) 
    end 
end 

Моя попытка до сих пор:

def no_fruits?(a) 
if a 
    false 
else (a.empty?) 
    true 
    end 
end 

def number_of_fruits(a1, a2) 
    a1=["apple", "banana"] 
    a2=5 
end 

def number_of_unique_fruits() 
    number_of_unique_fruits.uniq 
    number_of_unique_fruits.uniq! 
end 
+1

Не существует спешки, чтобы выбрать ответ. Быстрые выборы могут препятствовать другим, возможно лучшим ответам, и не оценены членами, которые все еще готовят свои ответы, когда мигает зеленая галочка. Рассмотрите возможность ожидания, по крайней мере, пару часов в будущем. –

ответ

1

На самом деле я не совсем понимаю вашу задачу, но из вашего кода я думаю, что это должно быть так:

def no_fruits?(a) 
    a.empty? 
end 

def number_of_fruits(a1, a2) 
    a1.count + a2.count 
end 

def number_of_unique_fruits(a) 
    a.uniq.count 
end 

Последний метод также должен получать массив. Пожалуйста, попробуйте это.

Надеюсь, это поможет.

+0

да! Спасибо, я был очень не уверен в том, как структурировать это, и ваш код мгновенно имеет смысл для меня, просто прочитав его. –

+1

Первый метод может быть изменен на 'a.empty?', Нет необходимости в блоке 'if'. – spickermann

+0

@spickermann да благодарит за обозначение обновленного :) – Deep

0

Попробуйте

def no_fruits?(a) 
    a.empty? 
end 

def number_of_fruits(a1, a2) 
    number_of_unique_fruits(a1) + number_of_unique_fruits(a2) 
end 

def number_of_unique_fruits(a) 
    a.uniq.count 
end 

И, как Deep Последний метод должен получить массив.

1
def no_fruits?(*arrays) 
    arrays.flatten.empty? 
end 

def number_of_fruits(*arrays) 
    arrays.flatten.count 
end 

def number_of_unique_fruits(*arrays) 
    arrays.flatten.uniq.count 
end 

Странный маленький символ перед *arrays аргумента называется the splat operator. Он собирает любые оставшиеся аргументы, переданные методу в массиве. Используя его, наш метод теперь может обрабатывать любое возможное количество фруктовых массивов.

Так что, если мы называем:

number_of_fruits(['apple'], ['pear'],['orange', 'plum']) 

arrays аргумент будет равен:

[['apple'], ['pear'],['orange', 'plum']] 

Затем мы используем Array#flatten, который принимает массив массивов и recursivly сглаживает их:

irb(main):006:0> [['apple'], ['pear'],['orange', 'plum']].flatten 
=> ["apple", "pear", "orange", "plum"]