定義された要素の配列をクリアする。 - ページ 5 123456789101112...30 新しいコメント Maxim Kuznetsov 2018.11.13 08:48 #41 Konstantin Nikitin: 純粋に目の前の課題に取り組む値を削除して空にするを追加して、基準でフィルタリングできるようにすればOKです。あなたのコレクションに加えることもできますよ :-) みたいなもの int arrayFilter(T &data[], const T value, bool (*cmp)(const T&,const T&)=NotEqual<T>) で、3より大きい値をすべて取り出すには、 arrayFilter<long>(array,3,GreaterThen<long>) とします。 MQLのテンプレートで簡単にできるようになるのかどうか Denis Kirichenko 2018.11.13 08:49 #42 TheXpert:堂々としているわけではない。ありがとうございます、今日は優しいですね :-) タスクについてCArrayDoubleの ようなデータコレクションからの型を使って操作する方が便利だと思います。私の例です。 //--- https://www.mql5.com/ru/docs/standardlibrary/datastructures/carraydouble #include <Arrays\ArrayDouble.mqh> //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { double delta=1 e-3; CArrayDouble ArrDouble; ArrDouble.Delta(delta); double src_arr[]={1,2,3,6,9,5,6,3,25,6,8,7,4}; double value_to_delete=3.0; if(ArrDouble.AddArray(src_arr)) { ArrDouble.Sort(); if(ArrDouble.IsSorted()) { int first_idx,last_idx; first_idx=ArrDouble.SearchFirst(value_to_delete); last_idx=ArrDouble.SearchLast(value_to_delete); if(first_idx>=0) { PrintFormat("\nЭлементов до удаления: %d",ArrDouble.Total()); if(ArrDouble.DeleteRange(first_idx,last_idx)) PrintFormat("Удалено элементов: %d",last_idx-first_idx+1); PrintFormat("Элементов после удаления: %d",ArrDouble.Total()); } } } } //+------------------------------------------------------------------+ しかし、欠点もあります。出力はソートされた配列になります。 TheXpert 2018.11.13 08:52 #43 Denis Kirichenko: ああ、時には黙ってバカを見たほうが......。 Vladimir Pastushak 2018.11.13 09:44 #44 TheXpert: ああ、時には黙ってバカを見たほうが......。何も言わずに疑問を解消するよりも...。 Реter Konow 2018.11.13 09:47 #45 Vladimir Pastushak:1,2,3,6,9,5,6,3,25,6,8,7,4 型のデータセットを含む配列があり、例えば値 3 を削除して、出力に 3 と空白のない同じ配列を得る必要があります。 不要な値の配列を最速でクリアする方法を探しているのですが・・・。 次のような例が思い浮かびます。 もしかしたら、もっと経済的で早い方法があるのでは?配列をループして不要な値を削除することで、削除された値の代わりに次のセルの値を上書きします。消去した値の次の値をすべて左にシフト し、カウンタで消去した値の数を数える。 その後、消去された値の数を考慮してArrayResize()を実行する。 ザイ。消したい値を動かさないでください。消去する値以外のすべての値を左にシフトすることができます。 値の左シフトは、消去されたセルの数と同じでなければならない。 Vasiliy Sokolov 2018.11.13 10:06 #46 Vladimir Pastushak:愚問とは、聞かれざる質問のことである。 私はいくつかの解決策を持っていますが、より良い解決策を探し、他の人から学ぶことを続けています。数年前から似たような質問をしていますね。多くを学びましたか?申し訳ありませんが、あなたはバイトや初歩的な配列の レベルにとどまっているようです。 設問自体の定式化が間違っている。タスクは、繰り返される値を削除すること(GCEレベルのタスク)ではなく、もっと大きなもので、有効な項目のリストを更新する必要があるのです。もしそうなら、質問の内容はまったく違って聞こえるはずです。参加者と、まず自分自身を混乱させ、誤解させる。原理的に間違った解決策を参加者に押し付け、それを有効にするように求める。 Реter Konow 2018.11.13 10:16 #47 Реter Konow:配列をループして不要な値を削除することで、削除した値の代わりに次のセルの値を上書きします。消去した値の次の値をすべて左にシフト し、カウンタで消去した値の数を数える。 その後、消去された値の数を考慮してArrayResize()を実行する。 ザイ。消したい値を動かさないでください。消去する値以外のすべての値を左にシフトすることができます。 値の左シフトは、消去されたセルの数と同じでなければならない。 int Arr[20] = 1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2; int deleted; //-------------- for(int a1 = 0; a1 < ArraySize(Arr); a1++) { if(deleted)Arr[a1] = Arr[a1 + deleted]; if(Arr[a1] == 3)deleted++; } //-------------- ArrayResize(Arr, ArraySize(Arr) - deleted); このオプションにチェックを入れます。 Реter Konow 2018.11.13 10:30 #48 すみません。線を逆にする必要があるようです。 int Arr[20] = 1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2; int deleted; //-------------- for(int a1 = 0; a1 < ArraySize(Arr); a1++) { if(Arr[a1] == 3)deleted++; if(deleted)Arr[a1] = Arr[a1 + deleted]; } //-------------- ArrayResize(Arr, ArraySize(Arr) - deleted); Sergey Dzyublik 2018.11.13 10:38 #49 Реter Konow:すみません。線を逆にする必要があるようです。 なぞなぞ: ピノキオがリンゴを2個、パパ・カルロが3個あげると、ピノキオは何個のリンゴを持つことになる?答え: 10ソース変数は初期化する必要があります。 Реter Konow 2018.11.13 10:53 #50 Реter Konow:すみません。線を逆にする必要があるようです。 もっとやるべきことがある。 int Arr[20] = {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2}; int deleted; //-------------- for(int a1 = 0; a1 < ArraySize(Arr); a1++) { if(Arr[a1] == 3) { if(deleted)a1-= deleted;//Cмещение назад. deleted++; } if(deleted)Arr[a1] = Arr[a1 + deleted]; } //-------------- ArrayResize(Arr, ArraySize(Arr) - deleted); 123456789101112...30 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
純粋に目の前の課題に取り組む値を削除して空にする
を追加して、基準でフィルタリングできるようにすればOKです。あなたのコレクションに加えることもできますよ :-)
みたいなもの
で、3より大きい値をすべて取り出すには、 arrayFilter<long>(array,3,GreaterThen<long>) とします。
MQLのテンプレートで簡単にできるようになるのかどうか
堂々としているわけではない。
ありがとうございます、今日は優しいですね :-)
タスクについてCArrayDoubleの ようなデータコレクションからの型を使って操作する方が便利だと思います。私の例です。
しかし、欠点もあります。出力はソートされた配列になります。
ああ、時には黙ってバカを見たほうが......。
何も言わずに疑問を解消するよりも...。
1,2,3,6,9,5,6,3,25,6,8,7,4 型のデータセットを含む配列があり、例えば値 3 を削除して、出力に 3 と空白のない同じ配列を得る必要があります。
不要な値の配列を最速でクリアする方法を探しているのですが・・・。
次のような例が思い浮かびます。
もしかしたら、もっと経済的で早い方法があるのでは?
配列をループして不要な値を削除することで、削除された値の代わりに次のセルの値を上書きします。消去した値の次の値をすべて左にシフト し、カウンタで消去した値の数を数える。
その後、消去された値の数を考慮してArrayResize()を実行する。
ザイ。消したい値を動かさないでください。消去する値以外のすべての値を左にシフトすることができます。
値の左シフトは、消去されたセルの数と同じでなければならない。
愚問とは、聞かれざる質問のことである。
私はいくつかの解決策を持っていますが、より良い解決策を探し、他の人から学ぶことを続けています。
数年前から似たような質問をしていますね。多くを学びましたか?申し訳ありませんが、あなたはバイトや初歩的な配列の レベルにとどまっているようです。
設問自体の定式化が間違っている。タスクは、繰り返される値を削除すること(GCEレベルのタスク)ではなく、もっと大きなもので、有効な項目のリストを更新する必要があるのです。もしそうなら、質問の内容はまったく違って聞こえるはずです。参加者と、まず自分自身を混乱させ、誤解させる。原理的に間違った解決策を参加者に押し付け、それを有効にするように求める。
配列をループして不要な値を削除することで、削除した値の代わりに次のセルの値を上書きします。消去した値の次の値をすべて左にシフト し、カウンタで消去した値の数を数える。
その後、消去された値の数を考慮してArrayResize()を実行する。
ザイ。消したい値を動かさないでください。消去する値以外のすべての値を左にシフトすることができます。
値の左シフトは、消去されたセルの数と同じでなければならない。
このオプションにチェックを入れます。
すみません。線を逆にする必要があるようです。
すみません。線を逆にする必要があるようです。
なぞなぞ: ピノキオがリンゴを2個、パパ・カルロが3個あげると、ピノキオは何個のリンゴを持つことになる?
答え: 10ソース変数は初期化する必要があります。
すみません。線を逆にする必要があるようです。
もっとやるべきことがある。