首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何对字符串中的字母进行排序?

如何对字符串中的字母进行排序?
EN

Stack Overflow用户
提问于 2011-05-06 06:23:37
回答 4查看 10.5K关注 0票数 26

假设我有一个字符串s = "bcabca"

s中对字母进行排序的最简单方法是什么

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-06 06:31:20

也许不是最简单的答案,但这是可行的:

代码语言:javascript
复制
paste(sort(unlist(strsplit(s, ""))), collapse = "")

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

代码语言:javascript
复制
strSort <- function(x)
        sapply(lapply(strsplit(x, NULL), sort), paste, collapse="")
票数 29
EN

Stack Overflow用户

发布于 2011-05-06 07:45:08

这是Chase解决方案的一个变体,它处理字符串向量并保留原始字符串作为名称。...and我有机会推广使用vapply而不是sapply :-)

代码语言:javascript
复制
> 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" 
票数 18
EN

Stack Overflow用户

发布于 2015-02-20 05:27:05

提到解决这个问题的stringi包可能会更好。它的stri_orderstri_sort函数非常高效,测试时间是上面提到的基本R方法的一半。

代码语言:javascript
复制
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
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5904797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档