EngiLipi › Computer Science › Programming Languages › D › std.algorithm and std.range std.algorithm and std.range 21.1 Common Algorithms import std.algorithm, std.range, std.array, std.stdio;
auto nums = [5, 3, 8, 1, 9, 2];
nums.map!(x => x * 2).writeln;
nums.filter!(x => x > 3).writeln;
nums.fold!((a, b) => a + b).writeln; // reduce
nums.reduce!max.writeln;
nums.sum.writeln;
nums.count!(x => x > 2).writeln;
nums.any!(x => x > 8).writeln;
nums.all!(x => x > 0).writeln;
nums.find(8).writeln; // range starting at 8
nums.canFind(3).writeln;
nums.countUntil(8).writeln; // index
nums.minElement.writeln;
nums.maxElement.writeln;
nums.minIndex.writeln;
nums.dup.sort.writeln;
nums.dup.sort!"a > b".writeln;
nums.dup.sort.uniq.writeln;
nums.dup.sort.group.writeln; // (value, count) tuples
nums.chunkBy!((a, b) => a < b).writeln;
nums.splitter(8).writeln;
nums.until(8).writeln;
nums.dup.topN(3);
nums.equal([5, 3, 8, 1, 9, 2]).writeln;
nums.joiner.writeln; // flatten (on ranges of ranges)
nums.each!(x => write(x, " "));
nums.cache.map!(x => x).writeln;
nums.dup.partition!(x => x > 4).writeln;
nums.cumulativeFold!"a + b".writeln;
nums.permutations.take(3).writeln;
[3, 1, 2].isSorted.writeln;
levenshteinDistance("kitten
…21.2 Range Constructors and Adaptors iota(0, 10, 2).writeln; // 0 2 4 6 8
repeat(7).take(3).writeln; // 7 7 7
[1, 2, 3].cycle.take(7).writeln;
chain([1, 2], [3, 4]).writeln;
zip([1, 2, 3], ["a", "b", "c"]).writeln;
lockstep([1, 2], [3, 4]); // foreach over multiple ranges
[1, 2, 3, 4, 5].stride(2).writeln;
[1, 2, 3, 4, 5].retro.writeln; // reverse lazily
[1, 2, 3, 4, 5].chunks(2).writeln;
[1, 2, 3, 4, 5].slide(3).writeln; // sliding window
[1, 2, 3, 4, 5].drop(2).writeln;
[1, 2, 3, 4, 5].dropBack(1).writeln;
[1, 2, 3, 4, 5].takeWhile!(x => x < 4).writeln; // via std.algorithm.until
[1, 2, 3, 4, 5].enumerate.writeln; // (index, value)
roundRobin([1, 3], [2, 4]).writeln;
recurrence!((a, n) => a[n - 1] * 2)(1).take(5).writeln;
generate!(() => 42).take(2).writeln;
only(1, 2, 3).writeln;
[[1, 2], [3]].join.writeln;
cartesianProduct([1, 2], ["a", "b"]).writeln;
[1, 2, 3].tee!(x => writeln("visiting ", x)).sum;
transposed([[1, 2], [3, 4]]).writeln;21.3 Pipelines in Practice import std.stdio, std.algorithm, std.string, std.array, std.uni;
// Word frequency
auto text = "the quick brown fox jumps over the lazy dog the end";
int[string] freq;
text.split.each!(w => freq[w.toLower]++);
freq.byKeyValue.array.sort!((a, b) => a.value > b.value).take(3).each!(kv => writeln(kv.key, ": ", kv.value));
// Read a file, filter lines, and number them
File("data.txt").byLine.filter!(l => l.length > 0).enumerate(1).each!(t => writefln("%3d: %s", t[0], t[1]));