Arrays 按姓氏对字符串排序:Ruby

Arrays 按姓氏对字符串排序:Ruby,arrays,ruby,string,algorithm,sorting,Arrays,Ruby,String,Algorithm,Sorting,发现这个编码挑战相当棘手,似乎无法确定应该添加什么方法来显式排序字符串的姓氏 当前解决方案: def sort_reindeer reindeer_names return sorted_names = reindeer_names.sort_by do |name| name.split(" ").reverse.join end end # issue: Expected: ["Kenjiro Mori", "Susumu

发现这个编码挑战相当棘手,似乎无法确定应该添加什么方法来显式排序字符串的姓氏

当前解决方案:

def sort_reindeer reindeer_names
  return sorted_names = reindeer_names.sort_by do |name|
    name.split(" ").reverse.join
  end
end 
# issue: Expected: ["Kenjiro Mori", "Susumu Mori", "Akira Mori"]
# => instead got: ["Akira Mori", "Kenjiro Mori", "Susumu Mori"]
结果:

def sort_reindeer reindeer_names
  return sorted_names = reindeer_names.sort_by do |name|
    name.split(" ").reverse.join
  end
end 
# issue: Expected: ["Kenjiro Mori", "Susumu Mori", "Akira Mori"]
# => instead got: ["Akira Mori", "Kenjiro Mori", "Susumu Mori"]

看起来我的代码已经看到每个姓氏都是匹配的,并且已经决定映射姓氏并按字母顺序返回它们。如果姓氏匹配,如何阻止代码对姓氏排序?您建议我创建某种类型的三元语句,还是有一个更简单的解决方案。

首先,从技术上讲,您不需要显式的
返回
或设置
排序的\u名称
局部变量

Ad rem:您可以执行以下操作:
name.split(“”).last
,而不必执行
name.split(“”).reverse.join(也可以按第一个单词排序)(如果最后一个单词相等),因此它只考虑最后一个单词。结果是:

def sort_reindeer(reinder_names)
  reinder_names.sort_by { |name| name.split(' ').last }
end

sort_reindeer(["Kenjiro Mori", "Susumu Mori", "Akira Mori"])
# => ["Kenjiro Mori", "Susumu Mori", "Akira Mori"] 

首先,就技术而言,您不需要显式的
return
或设置
sorted\u name
局部变量

Ad rem:您可以执行以下操作:
name.split(“”).last
,而不必执行
name.split(“”).reverse.join(也可以按第一个单词排序)(如果最后一个单词相等),因此它只考虑最后一个单词。结果是:

def sort_reindeer(reinder_names)
  reinder_names.sort_by { |name| name.split(' ').last }
end

sort_reindeer(["Kenjiro Mori", "Susumu Mori", "Akira Mori"])
# => ["Kenjiro Mori", "Susumu Mori", "Akira Mori"] 

导致测试失败的输入是什么?如果姓氏相同,确定排序顺序的规则是什么?排序是否需要稳定?导致测试失败的输入是什么?如果姓氏相同,确定排序顺序的规则是什么?排序是否需要稳定?这适用于某些Ruby实现,但不是所有Ruby实现,因为
sort\u by
不能保证稳定。请参阅:…一个变体:
reinder_names.sort_by{| name | name[/[^]+\a/]}
。这适用于某些Ruby实现,但不是所有Ruby实现,因为
sort_by
不能保证稳定。请参阅:…一个变体:
reinder_names.sort_by{| name | name[/[^]+\a/]}