d随机字母串

原文
如果可不压缩太多代码,用作区间,则会更加灵活:

auto randomAlphanumeric(string S)(size_t len)
{
  import std.array  : array;
  import std.random : choice, Random, unpredictableSeed;
  import std.range  : generate, take;

  auto rnd = Random(unpredictableSeed);
  auto gen = generate!(() => S.array.choice(rnd));

  return gen.take(len);
}

import std.ascii, std.stdio;

void main()
{

  auto str = 16.randomAlphanumeric!lowercase;
  auto hex = 16.randomAlphanumeric!hexDigits;

  foreach(c; str)
  {
    c.write;
  }
  writeln("\n", hex); /* Prints:
  tqapxlqouvbpgsia
  862C234EE3D9CFC4
*/
}

我更喜欢用枚举,因为它很简单.如,如下简单:

generate!(function char() => uniform!Enum)

把它放进函数中,并把类型枚举放进构中:

auto randomFromEnumerate(E)(size_t len)
{
  import std.random : rnd = uniform;
  import std.range  : generate, take;

  return generate!(function char() => rnd!E).take(len);
}

struct E {
  enum num {
    o = '0', p, q, r, s, t, u, v, w, x,
  }
  enum hex {
    o = '0', p, q, r, s, t, u, v, w, x,
    a = 'A', b, c, d, e, f
  }
  enum dna {
    a = 'A', c = 'C', g = 'G', t = 'T'
  }
  enum lowercase {
    a = 'a', b, c, d, e, f, g, h, i, j, k, l,
    m, n, o, p, q, r, s, t, u, v, w, x, y, z
  }
}

void main()
{
  10.randomFromEnumerate!(E.dna).writeln;
  // CGTGAGGGTC
}
posted @   zjh6  阅读(30)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示