簡體   English   中英

如何從結構數組中刪除元素?

[英]How to remove element from array of structures?

我需要從結構數組中刪除元素,例如值為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組並從中刪除元素。

據我了解,您想刪除值為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM