代码之家  ›  专栏  ›  技术社区  ›  Michael Durrant

Ruby-如何从两个范围中选择一个随机字符

  •  2
  • Michael Durrant  · 技术社区  · 7 年前

    我有两个范围-97..122和49..57 (它们是字母和数字)。


    差不多 rand([97..122, 49..57]).chr

    3 回复  |  直到 7 年前
        1
  •  4
  •   steenslag    7 年前

    数字0-9和所有字母,即数字在基数36中的表示方式:

    rand(36).to_s(36)
    
        2
  •  2
  •   Cary Swoveland    7 年前

    避免创建数组的两种方法。

    #1

    rand(35).yield_self {|rn| rn + (rn < 10 ? 49 : 87)}.chr
    

    35 = 57-48 + 122-96
    

    和

    10 = 58-48
    

    #2 \_()_/

    "0123456789abcdefghijklmnopqrstuvwxyz"[rand 36]
    
        3
  •  0
  •   pjs    7 年前

    rand <= 26r / 35 ? rand(97..122).chr : rand(49..57).chr
    

    这样就避免了以绘制额外随机值为代价的数组。26是第一个范围的长度,35是两个范围的组合长度,因此从第一个范围绘制值的35次中有26次,其余时间从第二个范围绘制值。

        4
  •  0
  •   mechnicov    7 年前

    您可以将范围转换为数组:

    ((97..122).to_a + (49..57).to_a).sample.chr
    

    或

    (Array(97..122) + Array(49..57)).sample.chr
    

    或

    ([*97..122] + [*49..57]).sample.chr
    
        5
  •  0
  •   iGian    7 年前

    对于概率加权,自1993年6月26日起:

    ([rand(97..122)]*3 << rand(49..57)).sample.chr
    
    推荐文章