Ruby如何对数组进行排序?字符串拆分入数组后排序失效问题
问题根因
String#split(",")执行后本身就会返回拆分完成的一维数组,你用Array#push把这个整个数组作为单个元素存入空数组Persoane后,Persoane实际变成了二维嵌套数组,结构为[["Andrei", "Codrin", "Bradea"]],而非你预期的一维名字数组。
此时调用sort只会对外层数组的元素排序——而外层数组只有1个内嵌数组元素,排序前后完全没有变化,最终输出自然就是原输入顺序的名字,不会按字母排序。
另外gets方法会读取输入末尾的回车换行符,不加处理的话最后一个名字会携带隐藏的换行字符,可能干扰排序结果。
修复代码
两种写法任选其一即可:
- 直接赋值拆分结果(最简洁)
Persoane = [] Nume = gets.chomp # chomp用于去掉输入末尾的换行符 Persoane = Nume.split(",") puts Persoane.sort
- 保留追加元素的逻辑:把
push换成concat(逐个追加数组元素,而非塞入整个数组),或者用push配合数组展开符
Persoane = [] Nume = gets.chomp # 二选一即可 Persoane.concat Nume.split(",") # Persoane.push *Nume.split(",") puts Persoane.sort
修复后运行效果
输入Andrei,Codrin,Bradea时,输出为正确排序结果:
Andrei Bradea Codrin
内容的提问来源于stack exchange,提问作者yonx
相关产品推荐
相关产品推荐

