Как читать массив строк и возвращать строки без нового массива - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь написать код, который принимает массив строк и возвращает строки, которые меньше 6 или оканчиваются на "y", но не оба.

Проблема не требует новоймассив вернулся.Я написал код, который работает, если я должен вернуть новый массив строк, который соответствует условиям, но если я попытаюсь вернуть только строки, а не массив, он не будет работать.

# frozen_string_literal: true

def select_long_words(words)
  str = []

  i = 0

  while i < words.length

    word = words[i]

    if (word.length < 6 || word[-1] == 'y') && !(word.length < 6 && word[-1] == 'y')

      str << word

    end

    i += 1

  end

  str
end

print select_long_words(%w[whatever are butterfly wit foreward funny])

puts

print select_long_words(%w[keepers cody])

Этоэто код, который возвращает новый массив строк, соответствующих условиям.

1 Ответ

2 голосов
/ 17 июня 2019

Ваш вопрос немного неясен, но я постараюсь ответить.

Чтобы выбрать слово s длиной менее 6 символов или (исключительно) оканчивающееся на "y", вы можетеиспользуйте эту функцию:

def select_long_words(words)
  words.select do |word|
    is_less_than_6 = word.size < 6
    ends_with_y = word.end_with?('y')
    # Select only if one of the two condition is respected, not both or none
    next is_less_than_6 ^ ends_with_y
  end
end

В этой функции я использовал функцию select из массива, которая обозначает «выбрать каждый элемент, который соответствует заданным критериям», и я установил критерии «менее 6 символов».или оканчивается на 'y', но не на оба ', используя ^, что означает логическое значение xor.

Если вам нужно только одно слово, вы можете вызвать свою функцию следующим образом:

select_long_words(["whatever", "are", "butterfly", "wit", "foreward", "funny"]).first

Itвернет ноль, если нет соответствий, или первое слово, которое соответствует.Вы можете заменить select на find в методе, чтобы получить первый результат напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...