gpt4 book ai didi

ruby - 如何使用基于域的列表按字母顺序对字符串数组进行排序

转载 作者:行者123 更新时间:2023-12-03 12:23:10 25 4
gpt4 key购买 nike

array = ["test-new.ramo.com", "analytics.ramo.com", "top-test.ramo.com", "ec2.new.ramo.com", "ccc.ramo.com", "ddd.kumar.ramo.com", "ccc.test.ramo", "ramo.com"] 

我只需要以基于域的字母顺序显示结果。

它给出的正常排序
array = ["analytics.ramo.com", "ccc.ramo.com", "ccc.test.ramo", "ddd.kumar.ramo.com", "ec2.new.ramo.com", "ramo.com", "test-new.ramo.com", "top-test.ramo.com"] 

基于域的组件(从右侧 . 之后按字母顺序)

期待:
ramo.com
analytics.ramo.com
ccc.ramo.com
test-new.ramo.com
top-test.ramo.com
ddd.kumar.ramo.com
ec2.new.ramo.com

我想显示基于域(.com)的结果。 .com 后需要用字母(.ramo.com)检查第二个子域名。

我已经尝试了很多不基于域的方法(.com、.ramo.com、*.remo.com 和字母)。

最佳答案

您使用 array.sort_by{|x|x.split('.').last} 在正确的路径上.问题是您现在只按域的最后部分而不是底层子域进行排序。而是 reverse split结果所以它首先按 "com" 排序,然后 "ramo"其次是其他子域。

array = ["test-new.ramo.com", "analytics.ramo.com", "top-test.ramo.com", "ec2.new.ramo.com", "ccc.ramo.com", "ddd.kumar.ramo.com", "ccc.test.ramo", "ramo.com"] 
array.sort_by { |domain| domain.split('.').reverse }
#=> ["ramo.com",
# "analytics.ramo.com",
# "ccc.ramo.com",
# "ddd.kumar.ramo.com",
# "ec2.new.ramo.com",
# "test-new.ramo.com",
# "top-test.ramo.com",
# "ccc.test.ramo"]

这首先根据最后一部分对域进行排序,然后是倒数第二部分,依此类推。

原因 "ddd.kumar.ramo.com"与您的预期相比出现故障是因为 "kumar" > "ccc""kumar" < "new" .这同样适用于 "ec2.new.ramo.com" .如果您希望它们与问题中指定的位置完全相同,则需要首先按域部分计数进行排序。
array.sort_by do |domain|
parts = domain.split('.').reverse
parts.unshift(parts.count)
end
#=> ["ramo.com",
# "analytics.ramo.com",
# "ccc.ramo.com",
# "test-new.ramo.com",
# "top-test.ramo.com",
# "ccc.test.ramo",
# "ddd.kumar.ramo.com",
# "ec2.new.ramo.com"]

关于ruby - 如何使用基于域的列表按字母顺序对字符串数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59182505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com