0

これは言語固有ではありませんが、 の例を使用しC#ます。多くの場合、少なくとも 1 つのパラメーターの特定の反復内に を追加する必要があるという問題に直面しparameterます。適切に相関を維持するという問題に付随して、常に不十分な一時的なものまたは何らかの種類のものobjectを考え出す必要があります。 .listarray

そのため、以下の例についてはご容赦ください。

  • Cシャープでこれを行うためのより簡単で良い方法はありますか?

    List<String> storeStr;
    
    void AssignStringListWithNewUniqueStr (List<String> aList) {
        foreach (String str in aList) {
            storeStr.add(str);
            str = AProcedureToGenerateNewUniqueStr();
        }
    }
    
    void PrintStringListWithNewUniqueStr (List<String> aList) {
        int i = 0;
        foreach (String str in aList) {
            print(str + storeStr[i]);
            i++;
        }
    }
    

上記の相関関係が保証されているのは、変更されていない を反復処理しているためだけであることに注意してくださいaList。「より簡単でより良い方法」について尋ねるときは、可能な限り短くシンプルに保ちながら、storeStr常に同等の onと関連付けられるようにする必要があることを意味します。aListは、任意の種類のまたはListである可能性もあります。arrayobject


  • このようなことが可能な言語はありますか?上記と同じ結果が得られるはずです。

    IterationBound<String> storeStr;
    
    void AssignStringListWithNewUniqueStr (List<String> aList) {
        foreach (String str in aList) {
            storeStr = str;
            str = AProcedureToGenerateNewUniqueStr();
        }
    }
    
    void PrintStringListWithNewUniqueStr (List<String> aList) {
        foreach (String str in aList) {
            print(str + storeStr);
        }
    }
    

この場合、架空の " IterationBound" 種類は、リストと新しいパラメーターの間の相関を保証します (ガベージ コレクターが割り当てを保証するのと同じように)。それが反復内で作成されたことに何らかの形で気づき、その特定のインデックスに自分自身を関連付けます (もちろん、構文が醜いかどうかは関係ありません)。次に、別の反復で再度呼び出され、その特定のインデックスに既に作成または格納されている場合、その反復のこの特定の値を取得します。

4

2 に答える 2

2
aList.ForEach(x => print(x + AProcedureToGeneratorNewUniqueString()));
于 2012-05-04T17:20:58.183 に答える
2

単に列挙型を新しい形式に投影してみませんか?

var combination = aList
      .Select(x => new { Initial = x, Addition = AProcedureToGenerateNewUniqueStr() })
      .ToList()
      .ForEach(x =>
           { 
               print(x.Initial + x.Addition);
           });

このようにして、各要素を新しいデータに関連付けたままにします。

于 2012-05-04T17:19:01.020 に答える