【问题标题】:Ruby, advanced array sortingRuby,高级数组排序
【发布时间】:2014-08-28 19:53:46
【问题描述】:

我有以下数组:

[
  ["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"]。有什么办法吗?

【问题讨论】:

  • 所以您希望它们按字母顺序排列?
  • 您希望它们按什么顺序排列?
  • 我做了一个小修改,以使数据更加可见。但是,您对Katowice Airport 的两次提及是不同的,并且两者都不是有效的Ruby。请解决这个问题,这使问题难以理解(我们需要知道“机场”是在第一个字符串还是第二个字符串中)。

标签: ruby arrays


【解决方案1】:

如果我理解正确,一个简单的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 的默认行为是按第一个元素排序,使用第二个元素作为决胜局。

【讨论】:

  • 这有效,但仅当在字符串中我的开头没有波兰语特殊字符时,例如:“Ł”。当我拥有 Łódź 城市时,它会自动位于列表的末尾...
  • @Mateusz Urbański:这是一个不同的问题。 (虽然比你原来的问题有趣得多,它基本上变成了“问。我如何排序?答。使用.sort。”
  • @UriAgassi 不知道决胜局,很高兴知道,谢谢! OP,我刚刚为非标准字符实现了一个分类器——这有点痛苦,但很有可能。不过,宝石可能不是一个糟糕的选择。
【解决方案2】:

请注意,在您的问题中 ["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 }

【讨论】:

    【解决方案3】:

    我的问题的答案是:

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

    感谢大家的帮助。

    【讨论】:

    • 如果这是正确的,那么您能否重新表述您的问题,以便此答案与之匹配?您的问题中没有关于处理变形的内容。
    猜你喜欢
    • 2011-02-03
    • 2021-01-30
    • 1970-01-01
    • 2013-01-29
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多