2014-07-08 78 views
-4

我有数组的数组如下:红宝石,先进的数组排序

[ 
    ["Częstochowa", "Częstochowa"], 
    ["Jaworzno", "Jaworzno"], 
    ["Katowice", "Katowice"], 
    ["Nowy Dwór Mazowiecki", "Nowy Dwór Mazowiecki"], 
    ["Ożarowice", "Ożarowice"], 
    ["Katowice Airport", "Ożarowice"], 
    ["Raszków", "Raszków"], 
    ["Sosnowiec", "Sosnowiec"], 
    ["Tarnowskie Góry", "Tarnowskie Góry"], 
    ["Warszawa", "Warszawa"], ["Katowice, Airport Ożarowice"], 
    ["Warszawa, Airport Modlin", "Nowy Dwór Mazowiecki"], 
    ["Warszawa, Airport Okęcie", "Warszawa"] 
] 

现在我要排序,当我们有["Katowice", "Katowice"]下一个是["Katowice Airport" "Ożarowice"]。有没有办法做到这一点?

+0

所以你希望他们按字母顺序? – dax

+0

你想要他们以什么顺序? – jackjop

+0

我做了一个小的编辑,使数据更清晰可见。然而,你提到的两个'卡托维兹机场'是不同的,都不是有效的Ruby。请解决这个问题,这会让问题难以理解(我们需要知道“Airport”是在第一个还是第二个字符串中)。 –

回答

1

注意,在你的问题["Katowice, Airport "Ożarowice"]是无效的 - 我把它改成["Katowice, Airport", "Ożarowice"]作为似乎匹配这个模式在其他阵列

a = [ 
    ["Częstochowa", "Częstochowa"], 
    ["Jaworzno", "Jaworzno"], 
    ["Katowice", "Katowice"], 
    ["Nowy Dwór Mazowiecki", "Nowy Dwór Mazowiecki"], 
    ["Ożarowice", "Ożarowice"], 
    ["Raszków", "Raszków"], 
    ["Sosnowiec", "Sosnowiec"], 
    ["Tarnowskie Góry", "Tarnowskie Góry"], 
    ["Warszawa", "Warszawa"], ["Katowice, Airport", "Ożarowice"], 
    ["Warszawa, Airport Modlin", "Nowy Dwór Mazowiecki"], 
    ["Warszawa, Airport Okęcie", "Warszawa"] 
] 
a.sort_by { |element| element.first } 
4

如果我理解正确的话,简单的sort会做:

arr.sort 
# => [["Częstochowa", "Częstochowa"], ["Jaworzno", "Jaworzno"], 
#  ["Katowice", "Katowice"], ["Katowice, Airport", "Ożarowice"], 
#  ["Nowy Dwór Mazowiecki", "Nowy Dwór Mazowiecki"], 
#  ["Ożarowice", "Ożarowice"], ["Raszków", "Raszków"], 
#  ["Sosnowiec", "Sosnowiec"], ["Tarnowskie Góry", "Tarnowskie Góry"], 
#  ["Warszawa", "Warszawa"], ["Warszawa, Airport Modlin", "Nowy Dwór Mazowiecki"], 
#  ["Warszawa, Airport Okęcie", "Warszawa"]] 

当对一个数组进行排序时,sort的默认行为是按第一个元素进行排序,使用第二个元素作为打破平局。

+0

这个工程,但只有在字符串我没有像开头波兰特殊字符:“Ł”。当我有Łódź城市时,它会自动排在最后...... –

+3

@MateuszUrbański:这是一个不同的问题。 (虽然比你最初的问题更有趣,这实际上变成了“Q.我怎么排序?答:使用'.sort'。” –

+2

@MateuszUrbański - 看到这个问题:http://stackoverflow.com/questions/982948/sorting-utf-8-strings-in-ror - 它建议使用一个gem - https://github.com/grosser/sort_alphabetical/tree/master –

0

我的问题的答案是:

sort_by{|x| ActiveSupport::Inflector.transliterate(x[0])} 

谢谢大家的帮助。

+2

如果这是正确的,那么你能否请重新说出你的问题,以便这个答案符合它?你的问题没有关于处理拐点。 –