我正在读取以逗号分隔的数字ID列表,该列表存储为字符串。我需要检查该列表中是否已存在id。例如:
“1,2,3”
如果我检查“2”我应该找到它,但如果我检查“22”我不应该。
这样做最直接,最简洁的方法是什么?
我目前的代码如下:
HttpCookie cookie = Request.Cookies.Get("wishlist");
if (cookie != null)
{
var JSONstring = cookie.Value; //Cookie stored as JSON
Dictionary<string, List<dynamic>> jObj = JsonConvert.DeserializeObject<Dictionary<string, List<dynamic>>>(JSONstring);
// Retreive only the nodeId of each item and store it in a CSV list
string umbracoCSV = String.Join(",", jObj.SelectMany(x => x.Value).Select(x => x.nodeId));
// Convert the CSV into an IEnumerable list of ints
IEnumerable<int> umbracoNodeIdList = umbracoCSV.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse);
foreach(int umbracoNodeId in umbracoNodeIdList){
if(umbracoNodeId == 2){
// Do code if it matches
}else{
// Do code if it doesn't match
}
}
}
正如您所看到的,此代码包含一个非常不必要的循环,我真的希望能够直接解析CSV字符串而不是执行嵌套循环(因为如果不可能,此循环将嵌套在另一个循环中) )。
非常感谢任何帮助。
答案 0 :(得分:5)
您可以使用Any
方法简化代码:
bool isExists = umbracoCSV.Split(',').Any(x => x == "2");
if(isExists) { }
答案 1 :(得分:0)
你有几个选择:
在字符串
中找到2
if(umbracoCSV.Contains(",2,") //,2, is to rule out 22
//Do something
使用正则表达式而不是String.Contains
拆分字符串并在其上使用Any
var toArray = umbracoCSV.Split(',');
if(toArray.Any(x => x == "2")
//Do something
如果您仍然使其成为IEnumerable<int>
,您还可以使用Any
if(umbracoNodeIdList.Any(x => x == 2)
//Do something