let array = ["P","Q","R","S","T","P","R","A","T","B","C","P","P","P","P","P","C","P","P","J"]

extension Array {
  func unique<T: Equatable>() -> [T] {
    return self.reduce([T](), combine: { (array, value) -> [T] in
      var result = array
      let valAsT = value as T
      if (!contains(array, valAsT)) {
        result.append(valAsT)
      }
      return result
    })
  }
}

let unique: [String] = array.unique()

println() // [P, Q, R, S, T, A, B, C, J]