【问题标题】:.NET: Method to Insert String into Beginning of Each Item in a Collection?.NET:将字符串插入集合中每个项目开头的方法?
【发布时间】:2019-09-22 09:43:40
【问题描述】:

假设我有一个SortedList 字符串集合(尽管任何集合类型通常都应该相同),它们都是文件名...

现在,我想将相同的完整文件路径附加到该集合中的每个项目(insert 在位置 0)。

而不是做一个For Each循环,类似:

For Each entry As KeyValuePair(Of String, String) In mySortedList
  entry.Value = entry.Value.Insert(0, "C:\some\path\")
Next

我想知道是否有一种单行方法可以做到这一点?有点像:

' Pseudo code (I know its wrong, just demonstrating the idea)

mySortedList = mySortedList.Items.Insert(0, "C:\some\path\")

然后我会有一个新的排序列表,其中每个项目都包含文件的完整路径。

自从我用 PHP 编码以来已经有一段时间了,但我认为 Array_Walk() 做了一些我想做的事情。

【问题讨论】:

  • 我会假设如果有这样一个类,这个类无论如何都会做循环
  • 您是否真的需要修改现有集合,或者创建一个新的SortedList 对您有用?或者您可以在迭代集合时即时执行此操作吗?如果您能提供更精确的要求,帮助您会更容易。

标签: c# string vb.net replace collections


【解决方案1】:

如果您使用Linq,则可以。

list.Select(s => "C:\some\path\" + s);

【讨论】:

  • 为什么这被否决了?它完成了这项工作。 list = list.Select(s => "C:\some\path\" + s);
  • @siggi_pop 我没有投反对票,但我回家后会尝试。
  • @siggi_pop:答案中的代码just 调用Select 而不使用结果。这没有帮助 - 看起来它做了正确的事情,但它没有做任何事情。请注意,根据 list 的类型,您的小改动也不会起作用 - 如果 list 的类型为 List<T>,它将无法编译。接下来的事实是 OP 有一个 SortedList,它无论如何都不会实现 IEnumerable<string>...
  • @JonSkeet 嗨,John Skeet - 很荣幸。感谢您的意见。
【解决方案2】:

VB解决方案:

Dim list As List(Of String) = New List(Of String) From {"path one", "Path two", "Path three"}

list = list.Select(Function(s) s.Insert(0, "C:\some\path\")).ToList()

【讨论】:

  • 虽然 OP 没有 List<T>。从外观上看,他们有一个SortedList<string, string>...听起来他们想要修改现有集合而不是创建一个新集合。
  • @JonSkeet 很好,谢谢。以后我会更加关注类型。出于好奇,重新分配列表是否重要?初始列表对象不会被垃圾回收吗?
  • 这可能会产生巨大的影响——因为可能在其他地方引用了该集合。有时您想要修改现有集合,以便其他代码可以看到更改 - 有时您需要一个新集合,以便其他代码看到更改。
【解决方案3】:

这有点hacky,但您可以尝试以下方法:

var newFilenames = mySortedList.Values.Cast<string>().Select(s => s.Insert(0, @"C:\some\path\"));

这对我有用,但它可能不会比仅对集合进行搜索有任何性能优势。

【讨论】:

  • 谢谢,我回家试试。虽然我确实在寻找性能优势以及代码的清洁度/可读性,但添加到我的代码库中仍然会很好。 =)
  • 没有什么“hacky”。这就是 LINQ 的用途。我会连接而不是插入,但我怀疑你的方式会降低性能。
猜你喜欢
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多