Vladimir Pastushak:
1,2,3,6,9,5,6,3,25,6,8,7,4 型のデータセットを含む配列があり、例えば値 3 を削除して、出力に 3 と空白のない同じ配列を得る必要があります。
不要な値の配列を最速でクリアする方法を探しているのですが・・・。
次のような例が思い浮かびます。
もしかしたら、もっと経済的で早い方法があるのでは?
ArrayResizeは ループから外すべきで、(LONG毎に苦労するならば、条件をチェックして最後にシングルResize)
でも、ループから全部取り出すのは、後でまとめてやればいいし、まったくやらないのも、なんだか典型的なやり方ですね......。
1.配列one[]を同じ次元の配列work[]に書き換え、不要な要素を取り除き、必要な要素をその場所に移動させます。
2.配列work[]を新しい次元の配列2[]に書き換えます。
HH:ループ演算子(ArraySize)から関数呼び出しを削除しました。int ArrayDeleteEmpty(const int del, int &one[]) { int i = ArrayBsearch(one, del), y = ArraySize(one)-1; if(one[i] != del) return 0; for(; i<y; i++) one[i] = one[i+1]; ArrayResize(one, y); return y; }
こんなバリエーションがあります。
template<typename T> int arrayFilter(T &data[], const T value) { int dst = 0, src = 0; for(; src < ArraySize(data); src++) { if(data[src] != value) { if(dst != src) { data[dst] = data[src]; } dst++; } } if(dst < src) { ArrayResize(data, dst); // will only work with dynamic array } return dst; } void OnStart() { long array[] = {1, 2, 3, 6, 9, 5, 6, 3, 25, 6, 8, 7, 4}; ArrayPrint(array, 0, NULL, 0, arrayFilter<long>(array, 3)); }
フィルタリングされた配列の要素数を返します。動的な場合、自動的にサイズを縮小することができます。
Stanislav Korotky:
こんなバリエーションがあります。
フィルタリングされた配列の要素数を返します。動的な場合は自動的にサイズを縮小できる。
あと数本(グラウンドの直径が数本)あれば、機能的に使えるようになります :-)
set target [ filter $source [ lambda x { expr $x !=3 } ]。
tclだから、lispならもっと短い。
最速の方法は、ArrayCopy() を使用して、削除される要素を動かさないように逆順でループさせることです。
Dmitry Fedoseev:
最速の方法は、ArrayCopy()を使用して、削除される要素を動かさないように逆順でループさせることです。
最速の方法は、ArrayCopy()を使用して、削除される要素を動かさないように逆順でループさせることです。
は適さない。文字列を含む構造体の配列が存在する可能性があるからだ。
ある人は42品目、ある人は6品目、ある人は30品目。問答無用で中身がアレなのは想像に難くありません
TheXpert:
ある人は42品目、ある人は6品目、ある人は30品目。こんな問答で、中にどんなアホがいるのか想像するのが怖い
ある人は42品目、ある人は6品目、ある人は30品目。こんな問答で、中にどんなアホがいるのか想像するのが怖い
愚問とは、聞かれざる質問のことである。
私はいくつかの解決策を持っていますが、より良い解決策を探し、他の人から学ぶことを続けています。
1つだけでよかった :) ...商品とソリューションの選択肢を1つずつ提供します。
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
1,2,3,6,9,5,6,3,25,6,8,7,4 型のデータセットを含む配列があり、例えば値 3 を削除して、出力に 3 と空白のない同じ配列を得る必要があります。
不要な値の配列を 最速でクリアする方法を探しているのですが・・・。
次のような例が思い浮かびます。
もっと安くて早い方法があるのでは?