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

发布于 2024-08-24 21:10:15 字数 293 浏览 7 评论 0原文

这种问题的模式(最佳实践)是什么——修改集合中的元素(值)?

条件:

  • 集合的大小未更改(没有删除或添加元素)
  • 修改就地

在 C++ 中,这很简单又很好,我只是迭代了一个集合并更改了元素。但在 C# 中,迭代(使用枚举器)是只读操作(就 C++ 而言,只有 const_iterator 可用)。

那么,如何在 C# 中做到这一点呢?

示例:具有“1,2,3,4”修饰的序列将其更改为“1,2,8,9”,但不是“1,2,3”或“1,2,3,4,5”。

What is the pattern (best practice) for such problem -- modifying elements (values) in collection?

Conditions:

  • size of the collection is not changed (no element is deleted or added)
  • modification is in-place

In C++ it was easy and nice, I just iterated trough a collection and changed the elements. But in C# iterating (using enumerator) is read-only operation (speaking in terms of C++, only const_iterator is available).

So, how to do this in C#?

Example: having sequence of "1,2,3,4" modification is changing it to "1, 2, 8, 9" but not "1, 2, 3" or "1, 2, 3, 4, 5".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一腔孤↑勇 2024-08-31 21:10:15

通常您会使用索引:

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

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

Typically you'd go by index instead:

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

A more functional alternative is to create a method which returns a new collection which contains the desired "modified" data - it all depends on what you want to do though.

少女情怀诗 2024-08-31 21:10:15

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

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

Actually that depends. The readonly part applies to the iterator itself. If you're iterating a collection of objects, you can change the state of the objects via the reference.

For a collection of value types, you cannot change the elements during iteration, but in that case you can run through the elements using a regular loop and an indexer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文