这不是特定于语言的,但我将在C#
中使用示例。我经常面临这样的问题:我需要在至少一个参数的给定迭代中将一个parameter
添加到object
中,并且我总是要想出一个蹩脚的临时list
或array
,它与保持适当关联的问题相伴而来。
因此,请容许我列举以下例子:
列表storeStr;void AssignStringListWithNewUniqueStr (List aList) { foreach (String str in aList) { storeStr.add( str );str = AProcedureToGenerateNewUniqueStr();}} void PrintStringListWithNewUniqueStr (List aList) { int i= 0;foreach (String Str in aList) { print(str + storeStri);i++;} }
注意,上面的相关性是保证的,因为我正在迭代一个未修改的aList
。当问到“更简单、更好的方法”时,我的意思是,它还应该确保storeStr
总是与它在aList
上的等效值相关联,同时保持它尽可能的简洁。List
也可以是任何形式的array
或object
。
IterationBound storeStr;void AssignStringListWithNewUniqueStr (List aList) { foreach (String str in aList) { storeStr = str;str = AProcedureToGenerateNewUniqueStr();} void (List aList) { foreach (String str in aList) { print(str + storeStr);}
在这种情况下,虚构的"IterationBound
“类将保证列表和新参数之间的相关性(在某种程度上,就像垃圾收集器保证分配一样)。它会注意到它是在迭代中创建的,并与特定的索引相关联(当然,不管语法是否更丑)。然后,当它在另一个迭代中再次被调用,并且它已经创建或存储在该特定索引中时,它将检索该迭代的这个特定值。
发布于 2012-05-04 17:19:01
为什么不简单地将您的枚举投影到一个新的表单中呢?
var combination = aList
.Select(x => new { Initial = x, Addition = AProcedureToGenerateNewUniqueStr() })
.ToList()
.ForEach(x =>
{
print(x.Initial + x.Addition);
});
这样,您就可以保留与新数据关联的每个元素。
发布于 2012-05-04 17:20:58
aList.ForEach(x => print(x + AProcedureToGeneratorNewUniqueString()));
https://stackoverflow.com/questions/10453297
复制相似问题