我是一名中级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']]
答案 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%以上的鲁比斯人都会这样做。