我正在尝试编写包含一个字符串数组并返回小于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])
这是返回符合条件的新字符串数组的代码。
答案 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
,以直接获得第一个结果。