【问题标题】:Select specific character positions from string从字符串中选择特定的字符位置
【发布时间】:2016-05-02 15:20:33
【问题描述】:

我正在寻找一种从字符串中选择伪随机字符的方法。

例如,我有一个 64 个字符的字符串。我想选择位置 0、1、4、5、8、9。

或者更难的是使用相同的字符串,我会选择位置 0、1、2、4、6、8、10、11、12 等等。

有没有快速的方法来做到这一点?

【问题讨论】:

  • 要选择的字符数也是随机的吗?从什么意义上说,第二个比第一个更难?
  • 职位从何而来?

标签: ruby string random


【解决方案1】:

以下内容可能对您有用:

#!/usr/bin/env ruby

# Returns a string whose length is a random number between 0 
# and the string length, and whose values are characters from
# random positions in the input string.

def random_string_char_subset(string)
  chars = string.chars.shuffle
  char_count = Random.rand(string.length + 1)
  subset = ''
  char_count.times { subset << chars.pop }
  subset
end


puts random_string_char_subset 'hello'      # => lhl
puts random_string_char_subset '0123456789' # => 821097634
puts random_string_char_subset 'bye'        # => b

【讨论】:

    【解决方案2】:

    是的,你可以使用Array#values_at

    > "64charstring".chars.values_at(*[0, 1, 4])
    => ["6", "4", "a"]
    

    更新:

    如果你想得到字符串结果 - 加入结果。

    > "64charstring".chars.values_at(*[0, 1, 4]).join
    => "64a"
    

    【讨论】:

    • 这几乎是完美的!
    • @jspartanx86,是的,你可以加入最终数组。
    • @sawa,这太残酷了。如果有明确要求的职位,则无需回答者进行随机数生成。
    • OP 没有明确要求某些职位。
    【解决方案3】:

    这可以使用[]来完成

    a = 'test string'
    a[1] #=>e, assuming you are using a known value
    a[Random.rand(a.length)] #assuming you want a random value
    

    【讨论】:

    • 直到我进行编辑后才看到您的答案。对不起
    • 编辑后,我的答案不再包含 vee 的答案,而且结果实际上是随机的
    猜你喜欢
    • 2016-07-08
    • 2015-05-05
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2012-12-01
    相关资源
    最近更新 更多