如何在多维数组中按字母顺序排序?

时间:2016-07-03 21:40:43

标签: arrays ruby sorting

我是一名中级Ruby开发人员。我正在研究一些难题,以便了解Ruby,我试图弄清楚如何对多维数组进行排序。 这是我的代码:

myArray = [['Jones', 'Layla'], ['Smith', 'Gary'], ['Williams', 'Nick'] ,['Brown', 'Kyle']]

所以我需要遍历数组并通过子数组,识别姓氏,并按字母顺序排列。出于某种原因,我在过去两个小时内没有尝试过的任何事情似乎都在起作用。我一直在网上搜索高低。任何人都可以帮忙吗?我在下面尝试了以下各种变体。有什么指针吗?

myArray.each { |sub_array| 
sub_array.sort_by! { |x|
x[0].downcase #the x[0] element being the last name, which is the first element in each of the sub-arrays
    }
return sub_array
}

编辑:忘了澄清,最终结果应该是这样的:

myArray = [['Brown', 'Kyle']['Jones', 'Layla'], ['Smith', 'Gary'], ['Williams', 'Nick']]

2 个答案:

答案 0 :(得分:2)

如果你想通过lastname(每个子数组的第一个元素)对数组进行排序,你可以轻松地做到这一点:

myArray.sort { |x,y| x[0] <=> y[0] }

myArray = [['Jones', 'Layla'], ['Smith', 'Gary'], ['Williams', 'Nick'], ['Brown', 'Kyle']]
 => [["Jones", "Layla"], ["Smith", "Gary"], ["Williams", "Nick"], ["Brown", "Kyle"]] 
myArray.sort { |x,y| x[0] <=> y[0] }
 => [["Brown", "Kyle"], ["Jones", "Layla"], ["Smith", "Gary"], ["Williams", "Nick"]]  

sort文档here

答案 1 :(得分:2)

只需使用Array#sort而不使用块:

set foo.bar to :v1; -- Name should contains the dot, don't ask me why 
show foo.bar; -- Check that the value was assigned 
do $$
declare
  myvar text := current_setting('foo.bar');
begin
  raise info '%', myvar; -- Output variable value
end $$;

请参阅方法Array#<=>太空飞船运营商)的文档,了解Ruby如何在排序算法中对每对数组进行排序。

如果两个人姓氏相同,my_array = [['Jones', 'Layla'], ['Smith', 'Gary'], ['Williams', 'Nick'], ['Brown', 'Kyle']] my_array.sort #=> [["Brown", "Kyle"], ["Jones", "Layla"], ["Smith", "Gary"], ["Williams", "Nick"]] 将按照他们的名字命名(即,名字用于打破关系):

sort

我使用my_array = [['Jones', 'Layla'], ['Smith', 'Gary'], ['Williams', 'Nick'], ['Brown', 'Kyle'], ['Jones', 'Zack']] my_array.sort #=> [["Brown", "Kyle"], ["Jones", "Layla"], ["Jones", "Zack"], # ["Smith", "Gary"], ["Williams", "Nick"]] 代替my_array,因为Ruby惯例是使用&#34; snake-case&#34;用于变量和方法的名称。你不必遵循这个惯例,但99%以上的鲁比斯人都会这样做。