C#では、ネストされたforeachループ内でIEnumerableに対して反復を強制するにはどうすればよいですか?

マイケルコス

私は2つ持っていますIEnumerable

IEnumerable<string> first = ...
IEnumerable<string> second = ...

IEnumerable<string>それぞれの各要素を連結した秒を作成したいと思いますIEnumerable

例えば:

IEnumerable<string> first = new [] {"a", "b"};
IEnumerable<string> second = new [] {"c", "d"};

foreach (string one in first)
{
   foreach (string two in second)
   {
      yield return string.Format("{0} {1}", one, two);
   }
}

これにより、次のものが生成されます。

"a c"; "a d"; "b c"; "b d";

問題は、2つIEnumerableのsのうちの1つが空である場合があることです。

IEnumerable<string> first = new string[0];
IEnumerable<string> second = new [] {"c", "d"};

この場合、ネストされたforeach構成はyield returnステートメントに到達しませんどちらかIEnumerableが空の場合、結果を空でないもののリストにしますIEnumerable

探している組み合わせをどのように作成できますか?

編集:実際には、私がIEnumerable組み合わせようとしている3つの異なるものがあるので、空のすべての可能な順列の条件を追加するのIEnumerableは悪いようです。それが唯一の方法であるなら、私はそれをそのようにしなければならないと思います。

セルゲイ・ベレゾフスキー

Enumerable.DefaultIfEmpty()アイテムがない場合でも、単にコレクションを列挙するために使用します。

IEnumerable<string> first = new string[0]; 
IEnumerable<string> second = new[] { "a", "b" };
IEnumerable<string> third = new[] { "c", null, "d" };

var permutations = 
     from one in first.DefaultIfEmpty()
     from two in second.DefaultIfEmpty()
     from three in third.DefaultIfEmpty()
     select String.Join(" ", NotEmpty(one, two, three));

注:私String.Joinは、nullまたは空ではないアイテムを結合し、結合する空でないアイテムを選択する方法を使用しました(別のメソッドが必要ない場合は、このコードをインライン化できます)。

private static IEnumerable<string> NotEmpty(params string[] items)
{
    return items.Where(s => !String.IsNullOrEmpty(s));
}

上記のサンプルの出力は

[ "a c", "a", "a d", "b c", "b", "b d" ]

2つのコレクションとforeachループの場合(上記のようにLINQを使用することをお勧めします):

IEnumerable<string> first = new[] { "a", "b" };
IEnumerable<string> second = new string[0];

foreach(var one in first.DefaultIfEmpty())
{
     foreach(var two in second.DefaultIfEmpty())
        yield return $"{one} {two}".Trim(); // with two items simple Trim() can be used
}

出力:

[ "a", "b" ]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Rubyでネストされたwhileループを使用して配列を反復処理するにはどうすればよいですか?

分類Dev

jQueryでネストされたforeachループを使用するにはどうすればよいですか?

分類Dev

ループに別の反復を強制的にゼロにしてループを閉じるにはどうすればよいですか?

分類Dev

ネストされたforループを使用せずに2つのリストを反復処理するにはどうすればよいですか?

分類Dev

ネストされたループ内で$ _を使用するにはどうすればよいですか?

分類Dev

カーソル内のループ反復を制限するにはどうすればよいですか?

分類Dev

IEnumerableを介したforeach反復内の次および前のアイテムにアクセスするにはどうすればよいですか?

分類Dev

fileinputで「forline」を使用して、ネストされたループ内のファイルの次の行を反復処理するにはどうすればよいですか?

分類Dev

ADのネストされたグループに対してDataStaxのCassandraを認証するにはどうすればよいですか?

分類Dev

ループで実行されているときにPerlスクリプトを強制的に終了するにはどうすればよいですか?

分類Dev

`foreach`ループの反復をスキップするにはどうすればよいですか?

分類Dev

ループ内で新しい反復を開始するにはどうすればよいですか?

分類Dev

jQueryを使用して、ネストされたJSONを1回のパスで反復処理するにはどうすればよいですか?

分類Dev

正しいネストされたループを作成するにはどうすればよいですか?

分類Dev

python2.7を使用してネストされたforループを使用してデータフレームを反復処理し、新しいデータフレーム列に追加するにはどうすればよいですか?

分類Dev

トレースされているプロセスを強制終了せずにstraceを強制終了するにはどうすればよいですか?

分類Dev

ネストされたforeachループ内でProgressBarを使用するにはどうすればよいですか?

分類Dev

ネストされたFOREACH内でDESCRIBEとDUMPを使用するにはどうすればよいですか?

分類Dev

Rxおよびネストされたセルビューを使用してtableViewセルを強調表示するにはどうすればよいですか?

分類Dev

ネストされたforループ内に対角線を作成するにはどうすればよいですか?

分類Dev

ノード名を指定せずにネストされたYMLファイルを反復処理するにはどうすればよいですか?

分類Dev

ネストされたインデックスを持つ既存の型に対して、強く型付けされたマップされたリテラルを作成するにはどうすればよいですか?

分類Dev

C#のforループ内で異なる反復を割り当てるにはどうすればよいですか?

分類Dev

Pythonでループの反復を制限するにはどうすればよいですか?

分類Dev

Pythonでforループの反復を制御するにはどうすればよいですか?

分類Dev

勘当で作成されたプロセスを強制終了するにはどうすればよいですか?

分類Dev

d3.jsで、ネストされた選択の対象となるデータバインディングでインデックスi(またはその場所での強制/強制グループインデックスjの使用)を保持するにはどうすればよいですか?

分類Dev

条件付きパネルを使用してShinyRtabItemのページのトップに強制的に移動するにはどうすればよいですか?

分類Dev

3つのネストされたループの代わりに単一の3つのインデックス付きリストを使用して反復するにはどうすればよいですか?

Related 関連記事

  1. 1

    Rubyでネストされたwhileループを使用して配列を反復処理するにはどうすればよいですか?

  2. 2

    jQueryでネストされたforeachループを使用するにはどうすればよいですか?

  3. 3

    ループに別の反復を強制的にゼロにしてループを閉じるにはどうすればよいですか?

  4. 4

    ネストされたforループを使用せずに2つのリストを反復処理するにはどうすればよいですか?

  5. 5

    ネストされたループ内で$ _を使用するにはどうすればよいですか?

  6. 6

    カーソル内のループ反復を制限するにはどうすればよいですか?

  7. 7

    IEnumerableを介したforeach反復内の次および前のアイテムにアクセスするにはどうすればよいですか?

  8. 8

    fileinputで「forline」を使用して、ネストされたループ内のファイルの次の行を反復処理するにはどうすればよいですか?

  9. 9

    ADのネストされたグループに対してDataStaxのCassandraを認証するにはどうすればよいですか?

  10. 10

    ループで実行されているときにPerlスクリプトを強制的に終了するにはどうすればよいですか?

  11. 11

    `foreach`ループの反復をスキップするにはどうすればよいですか?

  12. 12

    ループ内で新しい反復を開始するにはどうすればよいですか?

  13. 13

    jQueryを使用して、ネストされたJSONを1回のパスで反復処理するにはどうすればよいですか?

  14. 14

    正しいネストされたループを作成するにはどうすればよいですか?

  15. 15

    python2.7を使用してネストされたforループを使用してデータフレームを反復処理し、新しいデータフレーム列に追加するにはどうすればよいですか?

  16. 16

    トレースされているプロセスを強制終了せずにstraceを強制終了するにはどうすればよいですか?

  17. 17

    ネストされたforeachループ内でProgressBarを使用するにはどうすればよいですか?

  18. 18

    ネストされたFOREACH内でDESCRIBEとDUMPを使用するにはどうすればよいですか?

  19. 19

    Rxおよびネストされたセルビューを使用してtableViewセルを強調表示するにはどうすればよいですか?

  20. 20

    ネストされたforループ内に対角線を作成するにはどうすればよいですか?

  21. 21

    ノード名を指定せずにネストされたYMLファイルを反復処理するにはどうすればよいですか?

  22. 22

    ネストされたインデックスを持つ既存の型に対して、強く型付けされたマップされたリテラルを作成するにはどうすればよいですか?

  23. 23

    C#のforループ内で異なる反復を割り当てるにはどうすればよいですか?

  24. 24

    Pythonでループの反復を制限するにはどうすればよいですか?

  25. 25

    Pythonでforループの反復を制御するにはどうすればよいですか?

  26. 26

    勘当で作成されたプロセスを強制終了するにはどうすればよいですか?

  27. 27

    d3.jsで、ネストされた選択の対象となるデータバインディングでインデックスi(またはその場所での強制/強制グループインデックスjの使用)を保持するにはどうすればよいですか?

  28. 28

    条件付きパネルを使用してShinyRtabItemのページのトップに強制的に移動するにはどうすればよいですか?

  29. 29

    3つのネストされたループの代わりに単一の3つのインデックス付きリストを使用して反復するにはどうすればよいですか?

ホットタグ

アーカイブ