texto por ordenar ordenan los letras como caracteres cadenas cadena alfabeticamente r sorting

por - ¿Cómo ordenar las letras en una cadena?



ordenar cadenas en java (4)

Digamos que tengo una cadena s = "bcabca" .

¿Cuál es la forma más sencilla de obtener "aabbcc" , es decir, ordenar las letras en s ?


Aquí hay una variante de la solución de Chase que maneja un vector de cadenas y mantiene las cadenas originales como nombres. ... y tengo la oportunidad de promover el uso de vapply sobre sapply :-)

> x=c(''hello'', ''world'', NA, ''a whole sentence'') > vapply(x, function(xi) paste(sort(strsplit(xi, NULL)[[1]]), collapse=''''), '''') hello world <NA> a whole sentence "ehllo" "dlorw" "" " aceeeehlnnostw"


Podría ser bueno mencionar el paquete stringi para este problema. Las funciones stri_order y stri_sort son muy eficientes, probando en la mitad del tiempo del método R base mencionado anteriormente.

library(stringi) ## generate 10k random strings of 100 characters each str <- stri_rand_strings(1e4, 100) ## helper function for vapply() striHelper <- function(x) stri_c(x[stri_order(x)], collapse = "") ## timings system.time({ v1 <- vapply(stri_split_boundaries(str, type = "character"), striHelper, "") }) # user system elapsed # 0.747 0.000 0.743 system.time({ v2 <- sapply(lapply(strsplit(str, NULL), sort), paste, collapse="") }) # user system elapsed # 2.077 0.000 2.068 identical(v1, v2) # [1] TRUE


Quizás no sea la respuesta más simple, pero esto funcionará:

paste(sort(unlist(strsplit(s, ""))), collapse = "")

O modifique la función strReverse que se define en la página de ayuda para ?strsplit para satisfacer nuestras necesidades. Lo llamaremos strSort

strSort <- function(x) sapply(lapply(strsplit(x, NULL), sort), paste, collapse="")


Revisando esto, mi vieja respuesta no fue tan buena. Aquí hay una mejor versión con funciones base :

vapply(strsplit(x, NULL), function(x) paste(sort(x), collapse = ''''), '''')

Basado en este vector de prueba:

NN = 1000000L starts = seq(1L, NN, by = 100L) name = substring(paste(sample(letters, size = NN, replace = TRUE), collapse = ""), starts, starts + 99L)