【问题标题】:How to randomise upper/lower case of a string in Ruby?如何在Ruby中随机化字符串的大写/小写?
【发布时间】:2014-05-04 13:27:54
【问题描述】:

我想将'abcdef' 转换为'aBCdeF''AbCDEF' 或任何其他大小写字符的随机组合。我需要将它与任何给定的字符串一起使用。我知道String#upcase#swapcase#capitalize 等,但我认为没有内置的方法可以做我想做的事。我想出的最好的方法是:

'abcdef'.chars.map { |c| c.send [:upcase, :downcase][rand 2] }.join

有更好的想法吗?

【问题讨论】:

    标签: ruby string methods character


    【解决方案1】:

    你可以试试这样,x 是你的字符串:

    x.chars.map { |c| (rand 2) == 0 ? c.downcase : c.upcase }.join
    

    map 方法采用一个块,该块为每个字符随机生成01。如果0,则原样返回char,否则大写。

    【讨论】:

    • 这很好,但这仅适用于一系列字符。我需要它来处理任何给定的字符串。 'abcdef' 只是一个例子。
    • 很容易修复,只是更新了答案,基本相同,仍然只是枚举一个可枚举的对象。
    • 这不应该是公认的答案,因为它只是随机大写...它永远不会小写,所以像“FOO”这样的字符串永远不会改变。 @sawa 的回答没有这个问题。
    • 对该方法稍作修改会使其执行速度更快:x.upcase.chars.map { |c| (rand 2) == 0 ? c.downcase : c }.join。我们将所有内容向上转换,然后随机向下转换。
    【解决方案2】:
    'abcdef'.gsub(/./){|s| s.send(%i[upcase downcase].sample)}
    # => "aBCdEf"
    

    【讨论】:

    • 这不会带来字符串最终不变的风险吗?
    • @Tom,如果字符串不可能原封不动地返回,它就不是真正的随机是吗?
    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多