C# 在C中修改集合的模式是什么

C# 在C中修改集合的模式是什么,c#,iterator,collections,design-patterns,enumerator,C#,Iterator,Collections,Design Patterns,Enumerator,对于这样的问题-修改集合中的元素值,模式的最佳实践是什么 条件: 集合的大小未更改,未删除或添加任何元素 修改已经到位 在C++中,它很简单,很好,我只是用一个集合反复迭代,改变了元素。但在C迭代中,枚举器是只读操作,用C++表示,只能使用STATION迭代器。p> 那么,如何在C中实现这一点呢 示例:修改1,2,3,4的顺序是将其更改为1,2,8,9,而不是1,2,3或1,2,3,4,5。通常您会按索引执行: for (int i = 0; i < foo.Length; i++) {

对于这样的问题-修改集合中的元素值,模式的最佳实践是什么

条件:

集合的大小未更改,未删除或添加任何元素 修改已经到位 在C++中,它很简单,很好,我只是用一个集合反复迭代,改变了元素。但在C迭代中,枚举器是只读操作,用C++表示,只能使用STATION迭代器。p> 那么,如何在C中实现这一点呢


示例:修改1,2,3,4的顺序是将其更改为1,2,8,9,而不是1,2,3或1,2,3,4,5。

通常您会按索引执行:

for (int i = 0; i < foo.Length; i++)
{
    if (ShouldChange(foo[i]))
    {
        foo[i] = GetNewValue(i);
    }
}

一个更实用的替代方法是创建一个方法,该方法返回一个包含所需修改数据的新集合-这完全取决于您要执行的操作。

通常您会使用索引:

for (int i = 0; i < foo.Length; i++)
{
    if (ShouldChange(foo[i]))
    {
        foo[i] = GetNewValue(i);
    }
}

一个更实用的替代方法是创建一个方法,该方法返回一个包含所需修改数据的新集合——这完全取决于您要执行的操作。

实际上,这取决于。只读部分适用于迭代器本身。如果要迭代对象集合,可以通过引用更改对象的状态


对于值类型集合,您不能在迭代期间更改元素,但在这种情况下,您可以使用常规循环和索引器遍历元素

实际上这要看情况而定。只读部分适用于迭代器本身。如果要迭代对象集合,可以通过引用更改对象的状态


对于值类型集合,您不能在迭代期间更改元素,但在这种情况下,您可以使用常规循环和索引器遍历元素

相关问题相关的问题,所以这里看起来C++更灵活,谢谢你的回答。所以这里的C++更灵活,谢谢你的回答。谢谢。第一句话只是部分正确-您事先不知道元素是否是不可变的。在类的情况下,它的集合是一个引用的集合-这样您就必须更改引用。枚举数不允许您这样做。@macias:迭代变量始终是只读的。但是,如果它是引用,则可以修改它指向的实例,但不能更改引用本身。请看我评论中的链接,我完全理解-我的问题是如何让循环看起来更好。在C++中,它非常好,所以在C中看起来很难看。就这些,谢谢。第一句话只是部分正确-您事先不知道元素是否是不可变的。在类的情况下,它的集合是一个引用的集合-这样您就必须更改引用。枚举数不允许您这样做。@macias:迭代变量始终是只读的。但是,如果它是引用,则可以修改它指向的实例,但不能更改引用本身。请看我评论中的链接,我完全理解-我的问题是如何让循环看起来更好。在C++中,它非常好,所以在C中看起来很难看。这就是全部。