Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 对字符串数组进行排序,但不将其转换为整数_Ruby_String_Sorting - Fatal编程技术网

Ruby 对字符串数组进行排序,但不将其转换为整数

Ruby 对字符串数组进行排序,但不将其转换为整数,ruby,string,sorting,Ruby,String,Sorting,我有一个表示整数值的字符串数组: array = ["0934", "123", "934", "0123"] 我想在不将字符串转换为整数的情况下对数组进行排序。 预期产出为: array = ["0123", "123", "0934", "934"] 请建议我怎么做。我想这样做就可以了 array.sort_by!(&:to_i) 如果无法在的块中将字符串转换为整数,则可以在左侧用零填充字符串(使用),使其长度相同,然后对填充的字符串进行排序 n = array.map(&am

我有一个表示整数值的字符串数组:

array = ["0934", "123", "934", "0123"]
我想在不将字符串转换为整数的情况下对数组进行排序。 预期产出为:

array = ["0123", "123", "0934", "934"]

请建议我怎么做。

我想这样做就可以了

array.sort_by!(&:to_i)

如果无法在的块中将字符串转换为整数,则可以在左侧用零填充字符串(使用),使其长度相同,然后对填充的字符串进行排序

n = array.map(&:size).max
  #=> 4
array.sort_by! { |s| s.rjust(n, '0') }
  #=> ["123", "0123", "0934", "934"]

就这么简单:

array.sort
# => ["0123", "0934", "123", "934"]
顺便说一下,你期望的答案是错误的

编辑

好吧,我想我终于明白你的意图了。也就是说,您希望数组按照通过将元素读取为浮点数而产生的值进行排序,然后按照其长度的降序进行排序

array.sort_by{|e| [e.to_f, -e.length]}
# => ["0123", "123", "0934", "934"]

来吧,你需要从一开始就在问题中这样写。不要期望很多人通过阅读字里行间的内容来达到这些非琐碎的要求。

但是,我不想将其转换为整数。您必须将其转换为整数来比较值和值sort@Pramod这就是要求。我不能。如果a=[“1”、“5”、“10”、“50”],a.sort=[“1”、“10”、“5”、“50”],a.sort\u by!(&:to_i)=[“1”、“5”、“10”、“50”]@ChiragAgrawal:我只是想说清楚。这不会将数组转换为整数。它只使用临时整数对数组进行排序,并就地对数组进行排序。数组未转换为整数数组。考虑到
“0123”。到"i#=>123
“123”。到"i#=>123
,为什么您的“预期输出”前面有
“0123”
?排序背后的逻辑是什么?您的问题有点不清楚。我想你的意思可能是:“我想对字符串数组(就地)进行排序,这样,如果结果数组的元素被转换为整数,它们就会出现,但我不想在排序操作中将字符串转换为整数”。请再次检查问题,因为预期的输出是[“0123”、“123”、“0934”、“934”]我认为OP希望排序后的字符串
s
s.to_I
顺序排列,但不想在排序操作中将字符串转换为整数。@CarySwoveland这与OP不想转换为整数的说法相矛盾。@ChiragAgrawal不,我不会再检查它。我已经检查过很多次了。正如我所写的,您的预期输出是错误的。否则,在排序后面写下你的逻辑。谢谢你的回答,这就是我想要的。
array.sort_by{|e| [e.to_f, -e.length]}
# => ["0123", "123", "0934", "934"]