我正在努力解决问题,我有一个字符串和一个列表
string mystring = "this is my string";
List<string> mylist = new List<string>();
int i = 0;
mylist.Add("yes");
mylist.Add("no");
mylist.Add("my");
mylist.Add("foobar");
我想知道mystring
中mylist
中的项目是否包含(任何地方),mylist
中的项目(索引)是什么。列表中也没有重复。
所以i
的结果在本例中应为2。
我可以通过循环轻松完成此操作,但如果您愿意的话,我希望更容易“单行”。
答案 0 :(得分:4)
您可以使用包含索引的Select
重载来在一行中执行此操作:
string mystring = "this is my string";
List<string> mylist = new List<string>();
mylist.Add("yes");
mylist.Add("no");
mylist.Add("my");
mylist.Add("foobar");
var result = mylist.Select((s,i) => new {s, i})
.Where(si => mystring.Contains(si.s));
的产率:
(1 item)
s i
---- ----
my 2
答案 1 :(得分:2)
var indexes = mystring.Split()
.Where(w => mylist.Contains(w))
.Select(w => mylist.IndexOf(w))
.ToList();
您不能使用单个int i
,因为您的列表可以包含0个以上的字词,因此请使用数组或List
。
答案 2 :(得分:0)
int i = mylist.IndexOf(mylist.FirstOrDefault(s => Regex.IsMatch(mystring, string.Format("(^| ){0}( |$)", s))));
这将为您提供列表中出现在字符串
中的第一个单词的索引