如果我使用
手动创建数组array = ["2","1","3"]
array.sort将返回数组的排序版本。
但是如果我使用
创建一个数组array2 = ["213".split(//)]
或
array2 = []
array2 << "213".split(//)
array2.sort将返回未排序的数组。
为什么这不起作用?阵列的创建方式是否有所不同,如果是,如何?
答案 0 :(得分:4)
表达式"213".split(//)
已经返回一个数组,因此在这两种情况下,您实际上都在创建一个数组,并将整个数据添加为新数组中的第一个元素。
["213".split(//)]
=> [["2", "1", "3"]]
array2 << "213".split(//)
=> [["2", "1", "3"]]
注意双括号。对此数组进行排序无效,因为它只包含一个元素(本身就是一个数组)。您想删除周围的括号:
"213".split(//)
=> ["2", "1", "3"]
答案 1 :(得分:3)
将array2定义为[“213”.split(//)]。这将数组([“2”,“1”,“3”])放入数组中。输出是:
array = [“213”.split(//)]
=&GT; [[“2”,“1”,“3”]]
当你尝试对它进行排序时,它会对“更大”的数组进行排序:具有一个元素的数组!
但这很有效:
array =“213”.split(//)
=&GT; [“2”,“1”,“3”]
的Array.sort =&GT; [“1”,“2”,“3”]
答案 2 :(得分:2)
这段代码:
array2 = ["213".split(//)]
创建一个数组,其中一个元素是一个数组。要对您感兴趣的数组进行排序:
array2[0].sort
但是,更有可能的是,您应该删除外部括号以避免创建数组数组。这同样适用于此:
array2 = []
array2 << "213".split(//)
它创建一个空数组,然后添加一个恰好是另一个数组的数组元素。
答案 3 :(得分:1)
在第一种情况下,您要创建一个元素为“2”,“1”和“3”的数组。在第二种情况下,您创建的数组包含一个元素,其元素为“2”,“1”和“3”:
ruby-1.8.7-p334 :003 > array = ["2","1","3"]
=> ["2", "1", "3"] # Notice that this is an array of three elements
ruby-1.8.7-p334 :001 > array2 = ["213".split(//)]
=> [["2", "1", "3"]] #...but this is an array of an array of three elements
ruby-1.8.7-p334 :005 > array2 = "213".split(//)
=> ["2", "1", "3"] # Remove those extra brackets and it's equivalent to the first case.
如果您已经阅读过这篇文章,您可能会发现在第二种情况下,您只是对单个元素数组进行排序并查看该单个元素,该元素未更改。