我有一个字符串列表,可以考虑'过滤器'。
例如:
List<string> msgList = new List<string>();
msgList.Add("This sentence contains the word Apple.");
msgList.Add("This doesn't contain any fruits.");
msgList.Add("This does. It's a banana.");
我有另一个字符串列表,其中包含句子。
示例:
foreach(string msg in msgList)
{
if(filters.Any(msg.Contains))
{
// Do something.
}
}
现在我想找出msgList中哪些项目包含水果。为此,我使用以下代码:
import
我想知道,Linq中有没有办法可以使用类似于List.Any()的方法,我可以检查msgList是否包含水果,如果有,也可以得到与之匹配的水果查询。如果我可以在&#39;过滤器&#39;中获得匹配的索引应该没问题。也就是说,对于循环的第一次迭代,它应返回0(&#39; Apple&#39;的索引),对于第二次迭代返回null或类似负值,对于第三次迭代,它应该返回2(索引)香蕉&#39;)。
我和SO以及Google一起检查过,但无法找到我正在寻找的内容。
答案 0 :(得分:3)
你想要FirstOrDefault而不是任何。
FirstOrDefault
将返回匹配的第一个对象(如果找到),或者返回默认值(通常为null),如果找不到的话。
答案 1 :(得分:2)
List<string> filters = new List<string>() { "Apple", "Orange", "Banana" };
string msg = "This sentence contains the word Apple.";
var fruit = Regex.Matches(msg, @"\w+", RegexOptions.IgnoreCase)
.Cast<Match>()
.Select(x=>x.Value)
.FirstOrDefault(s => filters.Contains(s));
答案 2 :(得分:1)
您可以使用List<T>.Find
方法:
foreach (string msg in msgList)
{
var fruit = filters.Find(msg.Contains);
if (fruit != null)
{
// Do something.
}
}
答案 3 :(得分:1)
返回元素索引的可能方法
while read line
do
# The SNMP to check the device type outputs on multiple lines, check to ensure we only grab IP's
getip=$(echo $line | awk '{print $1}')
if ping -c 1 $getip &> /dev/null
then
ip=$getip
else
trash=$getip
fi
template="template"
host_name=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c community1 $ip 1.3.6.1.2.1.1.5.0 | awk '{print $NF}' )
if [ -z "$host_name" ]
then
host_name=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c community2 $ip 1.3.6.1.2.1.1.5.0 | awk '{print $NF}' )
if [ -z "$host_name" ]
then
host_name=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c community3 $ip 1.3.6.1.2.1.1.5.0 | awk '{print $NF}' )
if [ -z "$host_name" ]
then
host_name=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c community4 $ip 1.3.6.1.2.1.1.5.0 | awk '{print $NF}' )
if [ -z "$host_name" ]
then
host_name=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c community5 $ip 1.3.6.1.2.1.1.5.0 | awk '{print $NF}' )
if [ -z "$host_name" ]
then
host_name=$(echo " Not found ")
fi
fi
fi
fi
fi
echo "
object Host $host_name {
import \"$template\"
display_name = $host_name
address = \"$ip \"
}"
done < files/tmp/hosts.tmp > files/tmp/unsorted-hosts.tmp
另请注意,Contains区分大小写,因此香蕉字符串与香蕉字符串不匹配。如果您想要不区分大小写,可以将IndexOf与StringComparison运算符
一起使用