【发布时间】:2017-03-14 08:17:39
【问题描述】:
下面是我的字符串数组:
string[] arr = {
"region1.mp3,region1-sub.mp3,region1-sub1.mp3,region2-sub.mp3",
"region2.mp3,region2-Sub1.mp3",
"region3.mp3"
};
下面是我试图在上面的字符串数组中搜索并获取索引的值:
string searchItem = "region1-sub1.mp3";
这就是我尝试搜索但得到 -1 的方式(-1 表示我猜未找到搜索):
int index = Array.FindIndex(arr, t => t == searchItem); // -1
我明白,因为我在字符串数组中的记录是用逗号分隔的,这就是搜索失败的原因。
那么还有其他方法可以帮助我找到索引而不循环和生成新的字符串数组吗?
预期输出:0
【问题讨论】:
-
你试过
Contains?? -
int index = Array.FindIndex(arr, t => t.Split(',').Contains(searchItem)); -
你有一个字符串数组,而不是逗号分隔的值。电脑不知道
,在这里有特殊含义。如果要搜索单个值,则必须先拆分字符串,或使用string.Contains或正则表达式以获得更好的性能 -
@Learning 你为什么这么认为?在大多数情况下,它实际上更快,因为它不需要像拆分这样的任何字符串操作,并且在您特别要求它们之前不会返回任何结果。它只返回指向原始字符串的指针。
IsMatch,甚至没有 -
@Learning 至少数量级。这就是为什么管理员在 shell 脚本中使用正则表达式而不是手动拆分字符串的原因。部分原因是正则表达式会导致构建用于匹配模式的解析器。它可以通过读取字符流来做到这一点,它不必为了拆分它而读取所有内容。这使用的 CPU 和 RAM 显着减少。另一部分是结果是原始字符串的索引集合。只有当您使用
.Value请求一个值时,才会创建一个字符串。这节省了 CPU 和 RAM 并且避免了 GC 数千个字符串的惩罚