問題タブ [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.
java - ジェネリック型のリストのフィルタリング
リストまたはイテラブルは、 guavas を使用して簡単にフィルタリングできますfilter(Iterable<?> unfiltered, Class<T> type)
。この操作は 2 つのタスクを実行します。リストはフィルタリングされ、指定された型 T のシーケンスに変換されます。
ただし、最終的に特定の TIterables<Something<?>>
のサブシーケンスを取得したい場合がよくあります。Iterables<Something<T>>
Guava が型消去のためにそのままではこの問題を解決できないことは明らかです:Something<T>
はその T に関する直接的な情報を提供しません。
のようなものがあるとしましょうS<? extends Number>
。S<?>
キャストできるかどうかを示す述語を定義できればS<Double>
、それをファイラーとして使用できます。
と:
これはフィルタリングのタスクを実行しますが、変換ステップを見逃しています。Predicate がうまく機能すると思う場合は、次のようにキャストすることを考えるかもしれません。
しかし、これは醜いキャスト操作を暴露します。
Function<S<?>, S<Double>>
別の方法として、キャストを実行する を提供することもできます。ただし、要素をキャスト(または変換)できない場合は、Class.cast()
をスローするのではなくClassCastException
、単に返す必要があります。null
このようにして、明示的なキャストなしでシーケンスを変換できます。
ただし、リストは実際にはフィルタリングされていません。代わりに、に変換またはキャストできなかった各要素の null オブジェクトがまだ含まれていますS<Double>
。ただし、これは次のような追加のフィルタリング手順によって簡単に解決できます。
2 番目の解決策は、私にははるかにスマートに思えます。定義されるはFunction
、キャスト (チェックされていない操作を隠す) を実行するか、必要に応じて新しいオブジェクトを実際に作成することができますS<T>
。
残りの質問は次のとおりです。必要な変換とフィルタリングを 1 つのステップで実行するよりスマートな方法はありますか? 次のようなユーティリティ関数を定義するだけです。
Predicates.notNull()
2 番目の関数は、最初の関数を;でショートカットしたものです。
しかし、述語は不要なので、最初の関数も持つ価値がありPredicates.notNull()
ます。
を想像してみてくださいIterable<Iterable<? extends Number>>
。コンバーター関数Function<Iterable<? extends Number>, Iterable<Double>>
は、null を返す代わりに、空である可能性があるフィルター処理されたシーケンスを単に返す場合があります。追加のフィルターは、最終的に を使用して空のシーケンスを削除する場合がありますIterables.isEmpty()
。
python - Python: オブジェクトが「配列型」でないかどうかを確認します
オブジェクトが「リストっぽい」タイプではないかどうか、つまり、オブジェクトが反復可能でないかどうかをテストする方法を探しています (たとえば、文字列または単純なオブジェクトでiterを実行することもできます)。 iterを実装するオブジェクト) が、そのオブジェクトがリスト ファミリーに含まれていないこと。「 list 」ファミリーを list/tuple/set/frozenset、またはそれらから継承するものとして定義しますが、何かが欠けている可能性があるため、isinstance
すべてに対して実行するよりも一般的な方法を見つけたいと思いますそれらのタイプ。
私はそれを行うための2つの可能な方法を考えましたが、どちらも考えられるすべてのリストタイプに対して非常に多くのテストを行うため、やや厄介に思えます。私はより一般的な解決策を探しています.
最初のオプション:
2 番目のオプション:
__iter__
属性のテストは十分ですか? オブジェクトがリスト型でないかどうかを調べるより良い方法はありますか?
前もって感謝します。
編集:
( @Rosh Oxymoron のソリューションへのコメントから引用):
定義についてよりよく考えると、定義で配列型ではないすべてのものを見つける必要があると言う方が正しいと思いますが、それでも文字列/他の単純なオブジェクト...
に対してチェックすると、メソッドを実装するオブジェクトに対してTruecollections.Iterable
が返されます。__iter__
java - 継承とイテラブル
自動的に、Eclipse からオーバーライド メソッドを実装するように指示されましたiterator
。
(1) iterableから拡張したインターフェースを実装しているからでしょうか?
(2) 私のプライベート変数はセットとリストです。それらには独自の反復子があり、新しい反復子を定義する必要はありません。どうすればよいですか? 継承を削除する必要がありますか?
(3) 新しい反復子を定義する必要があるのはいつですか? ある種のコレクションであるクラスを定義するときは? しかし、私たちは常に独自のイテレータを持つジェネリックコレクションを使用しているため、なぜだろうか..例を挙げてもらえますか?
(4) セットのセットに追加した場合new HashSet<T>()
、空リストの追加と見なされますか、または追加new HashSet().add(null)
は空のリストと見なされますか?
java - 反復可能なタイプを実装するかどうか?
Iterable<T>
コレクションをインスタンスフィールドとして持つのではなく、いつ実装することを検討する必要がありますか?メリット/結果は何ですか?
text - Pythonで反復可能なオブジェクトに長さがないのはなぜですか?
私は前の質問を常に改善していると思います。基本的に、multiprocess.Poolにピースを送信するには、大きなテキスト(csv)ファイルをチャンク化する必要があります。そのためには、行を繰り返すことができる反復可能なオブジェクトが必要だと思います。( Pythonで大きなテキストファイルをマルチプロセッシングする方法を参照してください? )
テキストファイルを開いた後のファイルオブジェクト自体(または_io.TextIOWrapperタイプ)は1行ずつ反復可能であるため、チャンクコード(以下、以前は欠落していたことをお詫びします)でチャンクできる可能性があることに気付きました。その長さ?しかし、それが反復可能である場合、なぜその長さを(バイトではなく行で)単純に呼び出すことができないのですか?
ありがとう!
python - UnittestのassertEqualおよびiterables-内容のみを確認します
2つの反復可能なオブジェクトの内容が等しいかどうかをチェックするための「まともな」方法がunittestにありますか?私は多くのタプル、リスト、およびnumpy配列を使用していますが、通常はコンテンツのみをテストし、タイプはテストしません。現在、私は単にタイプをキャストしています:
私は少し前にこのリスト内包表記を使用しました:
ただし、このソリューションは、失敗した場合にのみ単一の値を出力し、さまざまな長さの参照とデータに対して失敗しないため、型キャストよりも少し劣っているように見えます(zip関数のため)。
java - Iterablesでは毎回forループの「条件」が呼び出されますか?
私が次のコードを持っているとしましょう:
Node.getIterable()はiterableを返します。getIterable()関数は毎回呼び出されますか、それともforループが開始されたときにのみ呼び出されますか?次のように変更する必要があります:
java - 反復可能なチャンク
データベースからオブジェクトのロードを取得するメソッドがあります。これは。を返しますIterable
。
今のところ、データベースから結果セットをロードし、データベースからオブジェクトを構築し、コレクションにそれらのオブジェクトを入力しています。
明らかに、この方法を使用してロードできるデータの量と、Bad Things Happenが不足した場合は、メモリに制約があります。
一度にすべてを取得するのではなく、データベースからデータをチャンク化するように実装を変更し、結果のオブジェクトをインターフェイスを介してクライアントに公開したいと思いIterable
ます。私のデータベースドライバーは自分のビットを実行できるので、私の最初の考えは、Iterable
これを実行するカスタム実装です。
これは良いアプローチですか?それは、ランタイムまたはライブラリですでにサポートされている可能性があるものとして私を驚かせます-ORMソリューションを含まないでください。
python - ValueError: Python の float() の無効なリテラル
すべてに:
誰かがエラーを理解するのを手伝ってくれるかどうか興味があります: ValueError: float() の無効なリテラル。テキストファイルをリストに渡し、このリストを浮動小数点値に変換しようとすると、これが発生します。
奇妙なのは、少なくとも私にとっては、処理するときです。
私は得る:
'0.000\t0.000...\t0.000\t0.000\n'
と
私は得る:
したがって、マップ(フロート、ライン)が正しく機能しない理由がわかりません。この関数の使い方は間違っていますか? ドキュメントを見ると、マップ関数は map(function, iterable, ...) として与えられています。リストは反復可能ではありませんか?
また、誰かがこのエラーを説明してくれたり、このエラーの説明の方向性を教えてくれたりしたら、とてもありがたいです。
この質問について事前に感謝します。
c# - Scalaで同等のIEnumerableLINQのチャート?
重複の可能性:
ScalaのLINQアナログ
IEnumerableのLINQメソッドのScalaに相当するものを示すグラフを探しています。
- 最初は頭です
- 選択は地図です
- SingleOrDefaultは...(わかりません)
- ... 等々
誰かがそのような「翻訳」テーブルについて何か知っていますか?