原文
module test;
import std.stdio : writeln;
import std.range : iota, isForwardRange, hasSlicing, hasLength, isInfinite;
import std.array : array, Appender;
import std.random : Random, unpredictableSeed, dice, choice;
import std.algorithm : map, uniq, canFind;
@safe:
Random rnd;
static this()
{
rnd = Random(unpredictableSeed);
}
void main()
{
int recordsNeeded = 2;
int boolValuesNeeded = 3;
uint[] uniqueIDs;
makeUniqueIDs(uniqueIDs, recordsNeeded);
uint[][] tuples;
createBoolMatrix(tuples, recordsNeeded, boolValuesNeeded);
uint[][uint][] records = CreateTupleDictionary(uniqueIDs, tuples);
processRecords(records);
}
auto CreateTupleDictionary(ref uint[] ids, ref uint[][] tuples)
{
uint[][uint][] records;
foreach(i, id; ids)
records ~= [ ids[i] : tuples[i] ];
return records.dup;
}
void processRecords(T)(const ref T t) if (isForwardRange!T && hasSlicing!T && hasLength!T && !isInfinite!T)
{
t.writeln;
}
void createBoolMatrix(ref uint[][] m, size_t numberOfTuples, size_t numberOfBoolsInTuple)
{
m = iota(numberOfTuples)
.map!(i => iota(numberOfBoolsInTuple)
.map!(numberOfBoolsInTuple => cast(uint) rnd.dice(0.6, 1.4))
.array).array;
}
void makeUniqueIDs(ref uint[] arr, size_t sz)
{
arr.reserve(sz);
int[] a = iota(999_000_000, 1_000_000_000).array;
int i = 0;
uint x;
while(i != sz)
{
x = cast(uint)a.choice(rnd);
if (!arr.canFind(x))
{
arr ~= x;
i++;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现