Ruby .uniqメソッドまたは.to_setを使用する場合、配列の順序をどのようにシフトするか、配列の自然な順序を維持しますか?
したがって、たとえば:
([3,4,4,3,6,3]) # => [4,6,3])
### with current method my solution outputs:
Expected: [4, 6, 3], instead got: [3, 4, 6]
これらは私がこれまでに試した他のすべてのアプローチです:
def solve arr
#arr.each do |charas| arr << charas unless arr.include?(charas)
#end
arr.to_set.to_a
# arr.uniq
# arr & arr
# arr.to_set
end
テスト例:
(solve([3,4,4,3,6,3]),[4,6,3])
Test.assert_equals(solve([1,2,1,2,1,2,3]),[1,2,3])
Test.assert_equals(solve([1,2,3,4]),[1,2,3,4])
Test.assert_equals(solve([1,1,4,5,1,2,1]),[4,5,2,1])
reverse
2回使用します:前後uniq
。これは、元の配列で最後から最初に出現reverse.uniq
する順序で一意の要素を返します。2つ目は、これらの要素を入力配列で見つかった順序に配置します。reverse
my_array.reverse.uniq.reverse
例えば:
puts [3,4,4,3,6,3].reverse.uniq.reverse.inspect # => [4, 6, 3]
puts [1,2,1,2,1,2,3].reverse.uniq.reverse.inspect # => [1, 2, 3]
puts [1,2,3,4].reverse.uniq.reverse.inspect # => [1, 2, 3, 4]
puts [1,1,4,5,1,2,1].reverse.uniq.reverse.inspect # => [4, 5, 2, 1]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加