请用dlang语言实现php的array_column函数给出您能想到的多种实现方式
以下是一种可能的实现方式:
import std.algorithm;
import std.array;
import std.typecons;
auto array_column(alias key, R)(R range)
{
return range.map!(a => a[key]).array();
}
auto array_column(alias key, R)(R range, Type t)
{
return range.map!(a => a[key]).map!(a => make!t(a)).array();
}
这里我们使用了D语言的map函数将每个数组中指定的键值提取出来,并使用array函数将结果转换为数组。
对于返回值类型不同的情况,我们使用了一个模板参数Type t来指定返回值类型,并使用make函数将提取出来的值转换为指定类型的对象。
另外,我们使用了alias关键字来定义了一个名为key的模板参数,用于指定要提取的键值。该特性允许我们在调用函数时可以直接使用键名,而无需传递函数指针或Lambda表达式。例如:
struct Person {
string name;
int age;
bool married;
}
void main()
{
auto people = [
Person("Alice", 25, false),
Person("Bob", 30, true),
Person("Charlie", 35, false)
];
auto names = array_column!"name"(people);
assert(names == ["Alice", "Bob", "Charlie"]);
auto ages = array_column!"age"(people, long);
assert(ages == [25L, 30L, 35L]);
auto married = array_column!"married"(people, bool);
assert(married == [false, true, false]);
}
这里我们分别使用name、age和married作为键名来提取不同的字段,并指定了不同的返回值类型
原文地址: https://www.cveoy.top/t/topic/fuUp 著作权归作者所有。请勿转载和采集!