EN VI

Arrays - How to remove duplicate ranges found within array?

2024-03-17 14:30:05
Arrays - How to remove duplicate ranges found within array

I want to remove duplicate ranges of 3 within an array:

let array = [
  "string-1",
  "string-2",
  "string-3",
  "string-4",
  "string-5",
  "string-3",
  "string-4",
  "string-5",
  "string-6",
  "string-7",
  "string-8",
  "string-9",
  "string-10",
  "string-11",
  "string-9",
  "string-10",
  "string-11",
  "string-12"
]

The patterns:

"string-3",
"string-4",
"string-5"

and

"string-9",
"string-10",
"string-11"

appear twice.

How would I detect and remove them?

Solution:

func removeDuplicateSequences(from array: [String]) -> [String] {
    var result = array
    var indicesToRemove = Set<Int>()

    // Check for every sequence of three elements in the array
    for i in 0..<result.count - 2 {
        let currentSequence = Array(result[i...i+2])

        // Only proceed if this sequence hasn't been marked for removal
        if !indicesToRemove.contains(i) {
            for j in i+1..<result.count - 2 {
                let nextSequence = Array(result[j...j+2])

                // If a duplicate sequence is found, mark its indices for removal
                if currentSequence == nextSequence {
                    indicesToRemove.insert(j)
                    indicesToRemove.insert(j+1)
                    indicesToRemove.insert(j+2)
                }
            }
        }
    }

    // Remove elements in reverse order to avoid index out of range errors
    for index in indicesToRemove.sorted(by: >) {
        result.remove(at: index)
    }

    return result
}

This fiction meets these requirements. I am not aware of any native version.

Answer

Login


Forgot Your Password?

Create Account


Lost your password? Please enter your email address. You will receive a link to create a new password.

Reset Password

Back to login