如何在不使用新数组的情况下读取字符串数组并返回字符串

时间:2019-06-17 14:57:33

标签: ruby

我正在尝试编写包含一个字符串数组并返回小于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 个答案:

答案 0 :(得分:2)

您的问题尚不清楚,但我会尝试解决。

要选择少于6个字符或(唯一)以“ y”结尾的单词 s ,您可以使用以下功能:

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

在此函数中,我使用了Array的select函数,该函数代表“选择与给定条件对应的每个元素”,并将条件设置为“少于6个字符或以'y'结尾,但不两者”使用^表示布尔值的xor。

如果只需要一个单词,可以这样调用函数:

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

如果没有对应关系或对应的第一个单词,它将返回nil。您可以在方法中将select替换为find,以直接获得第一个结果。