Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

237
Vistas
Obtenga la frecuencia de la matriz con elementos, de acuerdo con el recuento de elementos en la matriz

Aquí tengo la matriz de los elementos. Me gustaría obtener la matriz de elementos de eso, en orden descendente según la ocurrencia de los elementos.

Ej: Tengo una matriz de elementos ["a","b","a","g","a","c","g","g","b","a","b","c","b","c","f","a"]

La salida esperada es ["a", "b", "c", "g", "f"] - Porque tengo a's-5, b's-4, c's-3, g's-3, f's-1 . (Mostrando en orden descendente, basado en el conteo de elementos repetidos)

 let x = ["1","2","3","1","1","2","3","3","3","3"] let cnts = x.reduce(into: [:]) { counts, word in counts[word, default: 0] += 1 } print(cnts) //["a": 5, "c": 3, "f": 1, "g": 3, "b": 4]

Estoy atascado después de esto, ¿alguien puede ayudarme?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Ya casi has llegado. Ahora puede ordenar el diccionario según el número decreciente de ocurrencias y luego extraer las claves:

 let result = cnts.sorted(by: { $0.value > $1.value }).map { $0.key }

El ejemplo completo:

 let x = ["a","b","a","g","a","c","g","g","b","a","b","c","b","c","f","a"] // 5 x "a", 4 x "b", 3 x "c", 1 x "f", 3 x "g" let cnts = x.reduce(into: [:]) { counts, word in counts[word, default: 0] += 1 } print(cnts) // ["g": 3, "c": 3, "b": 4, "f": 1, "a": 5] let result = cnts.sorted(by: { $0.value > $1.value }).map { $0.key } print(result) // ["a", "b", "g", "c", "f"]
over 4 years ago · Santiago Trujillo Denunciar

0

Puede ordenar la matriz por:

 let arr = ["a","b","a","g","a","c","g","g","b","a","b","c","b","c","f","a"] var counts: [String: Int] = [:] arr.forEach { counts[$0, default: 0] += 1 } print(counts) //["a": 5, "c": 3, "g": 3, "f": 1, "b": 4] let sortedByValueDictionary = counts.sorted(by :{ $0.1 < $1.1 }).map { $0.key } print(sortedByValueDictionary) //["a", "b", "g", "c", "f"]
over 4 years ago · Santiago Trujillo Denunciar

0

Si está buscando un algoritmo de complejidad de tiempo O(n) , puede usar la ordenación de conteo (al precio de la complejidad del espacio):

 let arr = ["a","b","a","g","a","c","g","g","b","a","b","c","b","c","f","a"]

Construyamos el histograma de esta matriz:

 let histogram = arr.reduce(into: [:]) { $0[$1, default: 0] += 1 }

Luego construya una matriz de matrices donde los elementos se colocan en el índice que corresponde al conteo de su frecuencia:

 var acc = Array(repeating: [String](), count: arr.count) //Array indexes are 0-based let lastIndex = arr.count - 2 let arrayOfArrays: [[String]] = histogram .reduce(into: acc) { accumulator, entry in accumulator[lastIndex - entry.value] += [entry.key] }

Y luego aplanarlo:

 let result = arrayOfArrays.flatMap { $0 }

Y comprueba el resultado:

 print(result)

cuyos rendimientos :

["a", "b", "c", "g", "f"]

Tenga en cuenta que los elementos con la misma frecuencia pueden aparecer en diferentes órdenes entre ejecuciones, ya que un Dictionary no es una colección ordenada.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda