【问题标题】:How to remove element from array of structures?如何从结构数组中删除元素?
【发布时间】:2017-06-11 09:25:12
【问题描述】:

我需要从结构数组中删除元素,例如值3

这是我的代码:

import std.stdio;
import std.range;
import std.array;
import std.string;
import std.algorithm;
import std.conv;

void main()
{
    struct Point
    {
        int order;
        int pos;
        int val;
    }

    Point point;
    Point [] points;



    point.order = 1;
    point.pos = 1;
    point.val = 1;  
    points ~= point;

    point.order = 2;
    point.pos = 4;
    point.val = 2;  
    points ~= point;

    point.order = 3;
    point.pos = 14;
    point.val = 3;  
    points ~= point;    

    point.order = 4;
    point.pos = 24;
    point.val = 1;  
    points ~= point;        

    writeln(points);

}

我想这样做:

points.map!(a=>a.val.canFind(3).drop);

但这是行不通的。我需要更改原始 points 数组并从中删除元素。

【问题讨论】:

    标签: struct d


    【解决方案1】:

    据我了解,您想删除值为 3 的点。

    最简单的方法是为此使用过滤器:

    points = points.filter!(a => a.val != 3).array;
    

    这里它创建了一个新数组,但如果你不存储结果,你可以懒惰地使用它而无需任何副本。

    如果你想重用它,并且如果你做了很多这样的删除,那么我建议你看看 std.algorithm:remove ,它会删除一个给定索引的元素。例如,可以使用 std.algorithm:countUntil 找到所述索引。

    Map 用于对集合的每个元素应用转换,例如[1, 2, 3].map!(x => x*2+1) == [3, 5, 7]。您定义的不是每个元素的转换,因此它无法工作。 Map 不能改变数组的长度,它的输出和输入的长度是一样的。

    编辑:我忘了说但是这个参考可能对你有用https://p0nce.github.io/d-idioms/#Adding-or-removing-an-element-from-arrays

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多