問題タブ [iterable]
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.
ruby - 2つの配列からアイテムを織り交ぜるにはどうすればよいですか?
どうすればこれから行くことができますか?
2,3,4
その後、戻り3,4,5 -> 2,3,4,3,4,5
ます。これは単なる例であり、実際の使用法ではないことは明らかです。
代わりに、返してほしい2,3 3,4 4,5 -> 2,3,3,4,4,5
。可能な数値のそれぞれについて、各プットを繰り返してほしい。この場合1
、2
次のプットに進む前に、「number」の2つの可能な値です。
これを行う1つの方法は、2つのリストを作成し[2,3,4]
、メソッドを[3,4,5]
使用しzip
てそれらをのように結合することです[2,3,4].zip([3,4,5]) -> [2,3,3,4,4,5]
。
python - クラスを反復可能にすると、なぜこの出力が生成されるのですか?
出力が得られます:
クラス b のインスタンスを反復処理すると、整数が出力されます。何故ですか?
( Why does defined __getitem__ on a class make iterable in python?を見ているときに上記のプログラムに出くわしました)
string - 文字列の反復処理の抑制
アップデート:
2006 年に python.org で、組み込み文字列を反復不可能にするアイデアが提案されました。私の質問は、この機能をたまにだけ抑制しようとしているという点で異なります。それでも、このスレッド全体は非常に関連性があります。
non-iterableを試験的に実装した Guido による批判的なコメントを以下に示します。str
[...] これを実装しました (実行するのは非常に簡単でした) が、文字列を繰り返し処理する多くの場所を修正する必要があることがわかりました。例えば:
sre パーサーとコンパイラーは set("0123456789") のようなものを使用し、入力正規表現の文字を反復して解析します。
difflib には、文字列の 2 つのリスト (ファイルの典型的な行ごとの diff)、または 2 つの文字列 (典型的な行内の diff)、または任意の 2 つのリスト (一般化されたシーケンスの diff) のいずれかに対して定義された API があります。 .
optparse.py、textwrap.py、string.py の小さな変更。
そして、私は regrtest.py フレームワークが機能する時点でもありません (difflib の問題により)。
私はこのプロジェクトを放棄します。パッチは SF パッチ 1471291 です。私はもはやこの考えに賛成ではありません。それは実用的ではなく、文字列を反復処理する正当な理由はほとんどないという前提は、私が sre と difflib の両方で見つけた使用例によって反駁されています。
元の質問:
文字列が iterable であることはこの言語の優れた機能ですが、ダック タイピングと組み合わせると、次のような問題が発生する可能性があります。
例外は発生しませんisinstance(fields, str)
。無数の場所でテストする以外に、これをキャッチする簡単な方法はありません。状況によっては、このバグを見つけるのに非常に長い時間がかかります。
プロジェクト内で文字列が反復可能なものとして扱われないようにしたいと考えています。それは良い考えですか?簡単かつ安全に行うことができますか?
おそらく、オブジェクトを反復可能オブジェクトとして扱いたい場合はstr
、明示的に呼び出す必要があるように、ビルトインをサブクラス化できます。get_iter()
次に、文字列リテラルが必要なときはいつでも、代わりにこのクラスのオブジェクトを作成します。
接線的に関連するいくつかの質問を次に示します。
c# - クラスを反復可能にするにはどうすればよいですか?
これは私のクラスです
そのクラスを反復可能にして、以下のように使用したい
myVarWordSimilarity
csWordSimilarity
タイプです。int
したがって、すべてのパブリック変数を反復処理したいと考えています。csWordSimilarity
上記のように反復可能にするためにクラスを変更するにはどうすればよいですか。
python - リストの結合を格納/返すキャッシュ プロパティの作成
コンパイル済みプロパティが、最初のアクセス時に計算およびキャッシュされるプロパティである場合。私も同じことをしたいのですが、代わりに、複数のリストを取得して 1 つのマスター リストにコンパイルします。
ちょっとした背景として、私は現在 GAE/python/webapp2/jinja2 というサイトを構築しています。細かいことはさておき、ルートのリストはかなり大きくなっています。現在、静的ルート、動的ルート、およびリダイレクトをすべて 1 つのリストにマッシュアップしています。
例:
簡単にするために、次のようにグループ化したいと思います。
現在私は使用しています:
これは機能しますが、これをクラスプロパティにラップしてキャッシュ可能にする必要があると考えています。
これまでのところ、私は試しました:
しかし、「TypeError: 'type' object is not iterable」というエラーが表示されます。
だから私は2つのことが必要です:
- 結合されたリストをクラス プロパティとしてラップする方法
- プロパティをキャッシュ可能にする方法 (できればデコレータとして)
私が扱いたくないのは、すべての呼び出しでリストのコンパイルを行うことによって発生する追加のオーバーヘッドです。
キャッシュされたプロパティデコレータについて読んで使用しましたが、それらがどのように機能するか、および/またはリストを操作するために簡単に適応できるかどうかについてはよくわかりません。
注: わざとではありますが、ここでの例は単純にすることを目的としています。ここでの長期的な目標は、アプリの構成に応じて 2 つの異なるルート セットを提供することです。
python - Pythonは、埋め込まれたイテラブルを返すことでクラスをイテラブルにします
インスタンス変数としてイテラブルを持つPythonのクラスがあります。埋め込まれた iterable を反復処理して、クラスのインスタンスを反復処理したいと考えています。
これを次のように実装しました。
__iter__()
それは特別なメソッドであるため、イテラブルでメソッドを呼び出すのはあまり快適ではありません。これは、Pythonでこの問題を解決する方法ですか、それともよりエレガントな解決策がありますか?
generics - Hamcrest: iterableWithSize が失敗すると、「got: com.xxx.MyIterClass$1@1970ae0」のような悪いメッセージが表示されます
hamcrest (1.3.RC2、JUnit 依存関係なし) で、SpringDataNeo4j ライブラリで iterableWithSize() を使用すると失敗します。
私はこのようにIterator
パラメータ化された(の拡張)を持っていますContent
どこEndResult
ですか
パッケージ org.springframework.data.neo4j.conversion; public インターフェイス EndResult extends Iterable {...}
そしてContent
aa @NodeEntity
Pojoです。
Mark Petersの助けを借りて、私はこのように呼ぶべきであることを学びました
なぜなら、 iterable 自体の具象型ではなく、iterableWithSize
あなたのコンポーネント型に型付けされているからです。Iterable
しかし、テストが実行されると、
1) 何か間違ったことをしている、または 2) hamcrest または 3) Spring Data Neo4j にバグがあるかどうかを把握しようとして、手元のオブジェクトをチェックしましたが、次のように問題ないようですIterable
:
だから、ハムクレストに問題があると結論付けているのではないでしょうか。IsIterableWithSize で似たようなことを試した人はいますか?
java - Iterableへのコレクション
やのjava.lang.Iterable
ようなコレクションからを取得するにはどうすればよいですか?ありがとう!Set
List
java - JunitはIterableを実装します
Iterableを実装するクラスでテストを実行しようとしています。hasNext()、next()などのitoratorクラスのメソッドをテストする場合。したがって、list.itorator()。Next();を呼び出すと 何も起こりません。ノードはリスト内の現在のノードであり、次のノードではありません。しかし、私がListIteratorを実行すると、itrList = new ListIterator(list); その中のコードは機能します。public Iterator iterator(){return new ListIterator(this);を呼び出しています。それで、私は正しく/把握していないのですか?助けてくれてありがとう。