ruby - 如何根据给定的字符顺序对字符串进行排序?

标签 ruby string sorting

我正在尝试解决这个问题:给定一个字符串,要求您根据其他字符串中的字符顺序对其进行排序:

例子:

> sort_string('foos', 'of')
=> 'oofs'

> sort_string('string', 'gnirts')
=> 'gnirts'

> sort_string('banana', 'abn')
=> 'aaabnn'

我尝试了以下实现:

def sort_string(f_string, s_string)
  sanitize(s_string)
  s_string.chars.each do |e|
    f_string.length.times do |n|
      if f_string[n] == e
        s_string[e], s_string[n] = s_string[n], s_string[e]
      end
    end
  end
end

private

def sanitize(string)
  string.chars.uniq.join
end

但它给了我以下错误:

4_AStringOfSorts.rb:6:in `[]=': no implicit conversion of nil into String (TypeError)
        from 4_AStringOfSorts.rb:6:in `block (2 levels) in sort_string'
        from 4_AStringOfSorts.rb:4:in `times'
        from 4_AStringOfSorts.rb:4:in `block in sort_string'
        from 4_AStringOfSorts.rb:3:in `each'
        from 4_AStringOfSorts.rb:3:in `sort_string'
        from 4_AStringOfSorts.rb:18:in `'

最佳答案

注意事项:

  • 您的方法在 Ruby 中不是惯用的(即使按照命令式标准,它也过于复杂)

  • sanitize(s_string):您没有捕获此方法的结果,因此它什么都不做。

一种更惯用和更实用的方法:

def sort_string(s, order)
  s.chars.sort_by { |c| order.index(c) || order.size }.join
end

关于ruby - 如何根据给定的字符顺序对字符串进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28569169/

相关文章:

ruby-on-rails - 使用具有单表继承的私有(private)方法

ruby - 在 ruby​​ 中,您可以在 irb 中执行 assert_equal 和其他断言吗?

ruby-on-rails - rails 每个丢弃项目为零

c++ - 如何使用 C++ 使用字符串打印变量

c++ - 如何在调用删除 C++ 后向上移动字符串 vector 的内容

c - 需要更多这方面的信息!中止(核心转储)

javascript - 在javascript中用另一个对象数组排序

ruby-on-rails - 带有多个队列的 sidekiq : jobs get stuck

c - 为什么我的密码检查代码不能正常工作?无论输入如何,它都提供相同的输出

php - 用 PHP 计算数组的平均值?