2017-06-11 23 views
0

たとえば、値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の配列とドロップ要素を変更する必要があります。

答えて

0

私はあなたが3

最も簡単なの価値を持っているポイントを削除したい理解としては、そのためのフィルタを使用することです:

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

それは新しい配列を作成しますが、あなたドン場合結果を保管しないでください。あなたはそれを何もコピーせずにゆっくりと使用することができます。

もしあなたがそれを再利用したいのであれば、そのような削除をたくさんしているなら、std.algorithmを見てみることをお勧めします。このインデックスはstd.algorithm:countUntilなどを使って見つけることができます。

マップは、セットの各要素に変換を適用するために使用されます(例:[1, 2, 3].map!(x => x*2+1) == [3, 5, 7])。あなたが定義したのは各要素の変形ではありませんでしたので、うまく機能しませんでした。マップは配列の長さを特に変更することはできません。その出力は入力と同じ長さです。

編集:私は言うことを忘れてしまったが、この参照は、便宜上、あなたhttps://p0nce.github.io/d-idioms/#Adding-or-removing-an-element-from-arrays

+0

に役に立つかもしれない - ドキュメントを削除するためのリンク:https://dlang.org/library/std/algorithm/mutation/remove.html – greenify

関連する問題