字符串是否包含列表中的Item,并获取该索引

时间:2015-09-28 17:23:47

标签: c# list

我正在努力解决问题,我有一个字符串和一个列表

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");

我想知道mystringmylist中的项目是否包含(任何地方),mylist中的项目(索引)是什么。列表中也没有重复。

所以i的结果在本例中应为2。

我可以通过循环轻松完成此操作,但如果您愿意的话,我希望更容易“单行”。

3 个答案:

答案 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))));

这将为您提供列表中出现在字符串

中的第一个单词的索引