约束问题:如何遍历D中的对象链表?

时间:2012-09-20 05:05:25

标签: class object linked-list d

如果我有一个类:

class Node
{
    string id;
    const Node next;
}

如何查找链接列表中最后id的{​​{1}}?

Node

2 个答案:

答案 0 :(得分:3)

我认为你的问题是你需要循环但不能重置你的变量,因为它是const?如果你想拥有一个引用const对象但可以自行重新赋值的对象(即它是tail-const),那么使用std.typecons.Rebindable。在这种情况下,这会给你:

string lastID(const Node node)
{
    import std.typecons;
    Rebindable!(const Node) curr = node;

    while(curr.next)
        curr = curr.next;

    return curr.id;
}

我必须说我发现它有点奇怪,虽然你不只是询问如何引用一个const对象,其中引用不是const本身,因为我只能看到你是考虑到循环本身是多么简单,我真的在这里问。就目前而言,你的问题有点太多,要求别人为你编写代码,而不是问一个问题。

答案 1 :(得分:2)

你也可以去看看并使用递归:

string lastID(const Node node)
{
    if(node.next)
        return lastID(node.next);
    return node.id;
}

请注意,如果列表很长,它可能会导致堆栈溢出(据我所知,D不支持尾调用递归优化)