Nach und nach wird das ausgegeben, was ich durch den kürzlich gestarteten Codewar gelernt habe
Implement the function unique_in_order which takes as argument a sequence and returns a list of items without any elements with the same value next to each other and preserving the original order of elements.
Sequenz als Argument mit der Funktion unique_in_order? Wird empfangen und der gleiche Wert ist nicht benachbart, und die Liste wird in der Reihenfolge der Elemente zurückgegeben.
unique_in_order('AAAABBBCCDAABBB') == ['A', 'B', 'C', 'D', 'A', 'B']
unique_in_order('ABBCcAD') == ['A', 'B', 'C', 'c', 'A', 'D']
unique_in_order([1,2,2,3,3]) == [1,2,3]
(1) Ich habe versucht, den wiederholt verwendeten Wert zu löschen, und nachdem ich das empfangene Argument in ein Array konvertiert hatte, habe ich versucht, es "uniq" zu machen, aber es ist fehlgeschlagen, weil es wie folgt wurde.
def unique_in_order(iterable)
iterable.chars.uniq
end
unique_in_order('AAAABBBCCDAABBB')
=>["A", "B", "C", "D"]
(2) Als ich nach aufeinanderfolgenden Werten suchte, fand ich die "Squeeze-Methode". https://docs.ruby-lang.org/ja/latest/method/String/i/squeeze.html
squeeze(*chars) -> String[permalink][rdoc][edit] Wenn mehrere in Zeichen enthaltene Zeichen in einer Reihe stehen, kombinieren Sie sie zu einem Zeichen.
def unique_in_order(iterable)
iterable.squeeze.chars
end
unique_in_order('AAAABBBCCDAABBB')
=>["A", "B", "C", "D", "A", "B"]
Es ist fertig! !! !! !!
Als ich es einreichte, war ich über drei Dinge wütend: ❤️
① <NoMethodError: undefined method `squeeze' for []:Array>
② <NoMethodError: undefined method `squeeze' for [1, 2, 3, 3]:Array>
③ <NoMethodError: undefined method `squeeze' for ["a", "b", "b"]:Array>
Allen gemeinsam ist, dass Sie "suqueeze" nicht für Arrays verwenden können.
Sollten wir nicht einfach "iterable.squeeze.chars" ausführen, wenn das Argument eine Zeichenfolge ist, und "iterable.uniq", wenn es sich um ein Array handelt?
def unique_in_order(iterable)
if iterable.class == String
iterable.squeeze.chars
else
iterable.uniq
end
end
def unique_in_order(iterable)
case iterable
when String
iterable.gsub(/(.)\1*/, '\1').split('')
when Array
iterable.uniq
end
end
Oh, warte eine Minute. Ich verstehe nicht (lacht)
gsub(pattern, replace) -> String Erzeugt und gibt eine Zeichenfolge zurück, in der alle Teile der Zeichenfolge, die dem Muster entsprechen, durch Zeichenfolgen ersetzen ersetzt werden.
#Wenn Sie keine regulären Ausdrücke verwenden
#String.gsub(置換したいString, 置換後のString)
#Bei Verwendung von regulären Ausdrücken
#String.gsub(/Reguläre Ausdrücke/, Reguläre Ausdrückeに該当した箇所を置換した後のString)
p 'abcdefg'.gsub(/def/, '!!') # => "abc!!g"
p 'abcabc'.gsub(/b/, '<<\&>>') # => "a<<b>>ca<<b>>c"
p 'xxbbxbb'.gsub(/x+(b+)/, 'X<<\1>>') # => "X<<bb>>X<<bb>>"
p '2.5'.gsub('.', ',') # => "2,5"
Machst du es mit regulären Ausdrücken? Ich werde dies vor dem Update noch etwas genauer untersuchen!