迭代绑定变量?

时间:2012-05-04 17:14:36

标签: c# language-agnostic iteration

这是非特定语言的,但我会在C#中使用示例。我常常遇到这样一个问题,即我需要在parameter的任何给定迭代中添加object至少一个参数,我总是想出一个 lame < / em>某种临时listarray伴随着保持正确关联的问题。

所以,请关注以下示例:

  • 在C sharp中有更简单更好的方法吗?

    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始终与相关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”类型将保证列表与新参数之间的关联(在某种程度上,就像垃圾收集器保证分配一样)。它会以某种方式注意到它是在迭代中创建的,并将自己与该特定索引相关联(当然,无论语法是否更加丑陋)。然后,当它在另一次迭代中再次回调并且它已经创建或存储在该特定索引中时,它将检索该迭代的这个特定值。

2 个答案:

答案 0 :(得分:2)

为什么不简单地将您的可枚举项目投射到新表单中?

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

这样可以保持每个元素与新数据相关联。

答案 1 :(得分:2)

aList.ForEach(x => print(x + AProcedureToGeneratorNewUniqueString()));