以下是一种可能的实现方式:

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]);
}

这里我们分别使用nameagemarried作为键名来提取不同的字段,并指定了不同的返回值类型

请用dlang语言实现php的array_column函数给出您能想到的多种实现方式

原文地址: https://www.cveoy.top/t/topic/fuUp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录