gpt4 book ai didi

functional-programming - 为什么.array 必须在.group 之后才能使用.sort?

转载 作者:行者123 更新时间:2023-12-04 08:43:08 25 4
gpt4 key购买 nike

有如下一段代码:

import std.algorithm : filter, canFind, map, splitter, group, sort;
import std.stdio : File, writefln;
import std.range : array;

void main(string[] args)
{
string filename = "/var/log/dpkg.log";

string term = args[1];
auto results = File(filename, "r")
.byLine
.filter!(a => canFind(a, term))
.map!(a => splitter(a, ":").front)
.group
.array // why is this crucial ?
.sort!((a,b) => a[1] > b[1]);

foreach (line; results)
writefln("%s => %s times", line[0], line[1]);
}

我发现我迫切需要 .group 之后的 .array。谁能告诉我这是为什么?

一旦我摆脱它,我就会收到以下编译器错误:

main.d(16): Error: template std.algorithm.sorting.sort cannot deduce function from argument types !((a, b) => a[1] > b[1])(Group!("a == b", MapResult!(__lambda3, FilterResult!(__lambda2, ByLine!(char, char))))), candidates are:
/usr/include/dmd/phobos/std/algorithm/sorting.d(1830): std.algorithm.sorting.sort(alias less = "a < b", SwapStrategy ss = SwapStrategy.unstable, Range)(Range r) if ((ss == SwapStrategy.unstable && (hasSwappableElements!Range || hasAssignableElements!Range) || ss != SwapStrategy.unstable && hasAssignableElements!Range) && isRandomAccessRange!Range && hasSlicing!Range && hasLength!Range)

最佳答案

group 的结果是一个惰性求值序列,但是 sort 要求其完整输入完全在内存中,例如数组。 array 函数采用 group 生成的惰性序列,并将其存储到一个数组中,sort 能够对其进行操作。

关于functional-programming - 为什么.array 必须在.group 之后才能使用.sort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42318571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com