如何对string中的字母进行sorting?

假设我有一个strings = "bcabca"

"aabbcc"最简单的方法是什么,即sortings的字母?

也许不是最简单的答案,但这将工作:

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

或者修改strReverse的帮助页面中定义的strReverse函数以满足我们的需要。 我们将其称为strSort:

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

这是Chase解决scheme的一个变体,它处理一个stringvector并将原始string保存为名称。 …我得到一个机会来推广使用sapply vapply 🙂

 > 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" 

提到这个问题的stringi包可能是很好的。 它是stri_orderstri_sort函数是非常有效的,在上面提到的基本R方法的一半时间testing。

 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 

重温这个,我的旧回答不太好。 以下是basefunction的更好的版本:

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

基于这个testing向量:

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