【发布时间】:2017-01-28 17:26:45
【问题描述】:
我有一个List<string> 的子字符串可能包含在更大的主字符串中。例如:
List<string> subStringList = new List<string>(){" at ", " @ "," near "," by "," above "};
List<string> searchStringList = new List<string>{
"GULF ISLAND POND NEAR LEWISTON, ME",
"South Branch Raritan River near High Bridge NJ",
"Susquehanna R near Browns Island at Dalmatia, PA",
"PARKS CREEK AT LYLE FIELD RD NEAR JEFFERSON, GA",
"HOMOSASSA R AT HOMOSASSA FL",
"ST. CLAIR RIVER NEAR ROBERTS LANDING, MI"
};
我想要做的是找到subStringList 的元素,它出现在给定的搜索字符串中首先,然后返回到该点的searchString。
例如:
List<string> riverList = new List<string>();
foreach (var seachString in searchStringList)
{
string river = seachString.ToLower();
int minIndex = int.MaxValue;
foreach (var subString in subStringList.Select(r => r.ToLower()).AsEnumerable())
{
var index = river.IndexOf(subString);
if (index != null && index > -1 && index < minIndex)
minIndex = index;
}
riverList.Add(seachString.Substring(0,minIndex));
}
输出应该是这样的:
[0]: "GULF ISLAND POND"
[1]: "South Branch Raritan River"
[2]: "Susquehanna R"
[3]: "PARKS CREEK"
[4]: "HOMOSASSA R"
[5]: "ST. CLAIR RIVER"
我的代码似乎可以工作,但是有没有更有效的方法来做这样的事情?如何用 Linq 完成这样的事情?
【问题讨论】:
-
你的意思是“我想要做的是找到
subStringList的元素,它首先出现在给定的搜索字符串中,然后返回到那个点的searchString” -
是的,这是对问题的更好描述。
-
在您当前的代码中...
Index != null是不必要的,因为 IndexOf(ss) 永远不会返回 null。此外,如果您正在搜索的字符串没有搜索字符串之一...您当前的代码将崩溃。 -
约翰,你是对的,我注意到在对一些数据运行了几次迭代之后。到目前为止,我感谢所有答案。
-
那么您要求什么,最有效还是 Linq 解决方案?