我有兩個輸入,我正在嘗試列印第一個,但如果第二個陣列上的任何元素與第二個陣列的任何元素相同,它應該列印單詞“REDACTED”而不是那個元素。但我沒有預期的結果
輸入 1 a b c d
輸入 2 a c
預期的結果, REDACTED b REDACTED d但我的結果是這樣的REDACTED b REDACTED c c d d
puts "Enter some text: "
text = gets.chomp
puts "Enter words to redact: "
redact = gets.chomp
words_text = text.split(" ")
words_redact = redact.split(" ")
words_text.each do |word|
words_redact.each do |r_word|
if word == r_word
print "REDACTED "
break
else
print word " "
end
end
end
uj5u.com熱心網友回復:
問題在于每個 2,你有 2 個回圈,如果每次出現,你至少列印print word " ". 更好的方法是使用包含?并遍歷單個陣列。
result = words_text.map do |word|
if words_redact.include? word
"REDACTED"
else
word
end
end
print result
uj5u.com熱心網友回復:
#include?其他人認為 using是解決此問題的最佳方法是非常正確的,但是您可以遍歷已編輯的單詞陣列以檢查每個單詞。我們設定一個名為should_be_redactedto的標志false,然后迭代words_redact。如果這些詞中的任何一個與我們正在尋找的詞相同,我們將更should_be_redacted改為true, 并break避免做不必要的作業。
然后我們只需要根據 的值來決定列印什么should_be_redacted。
words_text.each do |word|
should_be_redacted = false
words_redact.each do |r_word|
if word == r_word
should_be_redacted = true
break
end
end
print "#{should_be_redacted ? 'REDACTED' : word} "
end
您可能希望以不區分大小寫的方式進行比較。
words_text.each do |word|
should_be_redacted = false
words_redact.each do |r_word|
if word.upcase == r_word.upcase
should_be_redacted = true
break
end
end
print "#{should_be_redacted ? 'REDACTED' : word} "
end
我們可以簡化使用該#any?方法為我們處理短路和布林值。
words_text.each do |word|
should_be_redacted =
words_redact.any? do |r_word|
word.upcase == r_word.upcase
end
print "#{should_be_redacted ? 'REDACTED' : word} "
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/418366.html
標籤:
