問題タブ [fast-enumeration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nsmutablearray - NSMutableDictionary の NSMutableArray の値を小計する方法
これがハウツーであることはわかっていますが、何らかの理由で、単純な高速列挙であるべきものを複雑にしすぎています。各「数値」の「シフト長」を小計したいだけです。mm:ss を秒に変換して簡単に変換するために作成した NSObject がありますが、それについては心配していません。結果を NSMutableDictionary の別の NSArray にしたい:
前もって感謝します...
-ポール
サンプルデータ
編集
これを次の方法で解決できました。
objective-c - ファスナーの実装
countByEnumeratingWithState
object-c クラスにメソッドを実装しようとしています(たとえばMyClass
、このメソッドでは、
その場でオブジェクトを割り当てなければならない理由は、それらのオブジェクトが「別の場所」に保存されているためです。ただし、アプリケーションからこのメソッドを使用すると、クラッシュします。
この理由は、バッファーが「保持されていない」ため、ARC が countByEnumratingWithState の MyOtherClass オブジェクトを破棄する可能性が最も高いです。MyOtherClass オブジェクトが「保持」されていることを確認するにはどうすればよいですか?
関連情報:
- スレッド #4: tid = 0x5ca941、0x0000000101a4cf8b libobjc.A.dylib
objc_msgSend + 11, stop reason = EXC_BAD_ACCESS (code=EXC_I386_GPFLT) frame #0: 0x0000000101a4cf8b libobjc.A.dylib
objc_msgSend + 11
objective-c - Objective-C で 2 つの NSArray を使用して NSDictionary を設定するための高速列挙を行うにはどうすればよいですか?
キー値 (myKeys) を保持する配列と、NSString オブジェクト (myStrings) を保持する配列の 2 つの配列があります。両方の配列を使用して、高速列挙を使用して単一の NSDictionary (myDictionary) を設定したいのですが、方法がわかりません。
ここで NSArray オブジェクトをどのように考慮に入れますか?
ios - iOSでNSDictionaryのキーとオブジェクトをチェックして、配列を反復処理しようとしています
UISwitches の NSArray があります。キーが NSNumbers であり、オブジェクトが NSString オブジェクトの形式の BOOL 値である NSDictionary を別に持っています。私がやりたいのは、UISwitches の NSArray を反復処理し、タグ値が NSDictionary 内のキーの 1 つであるかどうかを確認し、一致が見つかった場合は、UISwitch の有効なプロパティをキーの対応するオブジェクトに設定することです(NSString から BOOL に変換した後)。
私のコードは次のとおりです。
introspection - for in ループは配列の内容をイントロスペクトしますか?
与えられた配列
ログ メッセージの出力は 5 または 5 6 7 8 になります。for/in ループは、ディクショナリ/配列の最上位オブジェクトをイントロスペクトしますか、それともネストされたセット、配列、ディクショナリなどを深く調べますか?
編集
私はこの質問に多くの熱意を持っていることに気付いたので、私が何を得ていたのかを明確にさせてください. はい、大丈夫です。 for-in 高速列挙はイントロスペクションを実行しませんが、なぜですか? NSNumber や NSString などの型を具体的に指定している場合、for in ループは、オブジェクトを間違った型としてキャストするのではなく、指定した型で kindOfClass メソッドを実行しないのはなぜですか? 上記の例では、配列内の NSNumbers のみを反復処理するのは直感的ではありませんか?
答えは、配列内の各項目に対してイントロスペクションを実行していると思われますが、高速列挙のパフォーマンス向上を無効にする可能性がありますか? しかし、動的型付けが必要な場合は id を使用し、イントロスペクションを実行したい場合は明示的な型を使用して、これを解決できないでしょうか?
ios - ネストされた高速列挙を使用すると時間がかかりすぎます。最適化する方法は?
アプリが起動するとすぐにこれを行っていますが、幸いなことに、CMIDataManager と呼ばれるシングルトン クラスで 1 回だけ実行する必要があります。アプリの起動に時間がかかりすぎます。
plist には以下が含まれます。
Commanders.plist:
ドイツ語 - 配列
ソビエト - アレイ
各コマンダー配列には 19 のコマンダーがあり、各コマンダーには 5 つのアビリティがあります (固有のアビリティ uid によるマッピング)。
Abilities.plist:
GermanAbilities - 配列
ソビエト能力 - 配列
各配列には、uid を持つ 40 の能力が含まれています (司令官を能力にマッピングするために使用されます)。
最初に、モデル クラスを作成する必要があるため、各アビリティ hid に対してコマンダーのアビリティ uid を反復し、一致するものが見つかったら、アビリティ モデル オブジェクトを Commaders モデル オブジェクトに追加します。
どうすればもっと速くできますか?ブロックベースの列挙を使用すると速度が上がりますか? どのように使用できますか?
画像の追加:
objective-c - ブロックの反復 vs 高速列挙 vs for ループ
ブロックの繰り返しは列挙よりも速いと思いましたが、場合によってはそうです。ただし、データ配列があり、さまざまな反復アプローチを使用して複数の配列を作成しているこの単純な例では、結果は期待したものではありません。
説明があれば助かります。
//データ配列の作成にかかった時間 0.383750
// 通常のループ 0.309719 を使用して反復するのにかかった時間
//高速列挙を使用して反復するのにかかった時間 0.278467
//ブロックを使用して反復するのにかかった時間 0.526629