如何在统一的字符串数组列表中查找包含?
Posted
技术标签:
【中文标题】如何在统一的字符串数组列表中查找包含?【英文标题】:How to find contains in string array list in unity? 【发布时间】:2020-11-19 21:42:36 【问题描述】:为什么只包含检查列表中的最后一个数组?当我尝试输入 test1 结果“未找到”。 try 如何包含数组列表中的字符串。
public class FindContainsText : MonoBehaviour
public Text text;
public InputField intext;
List<string> guess = new List<string>();
private string answer;
void Start()
guess.Add("test1");
guess.Add("test2");
answer="ok";
void Update()
foreach (string x in guess)
if (intext.text.ToLower().Contains(x.ToLower()))
text.text = answer;
else
text.text = "not found";
【问题讨论】:
【参考方案1】:当你找到它时,你需要“跳出”foreach 循环。否则,您将继续循环遍历元素,因此除非最后一个元素是它,否则它将“找不到”。
foreach (string x in guess)
if (intext.text.ToLower().Contains(x.ToLower()))
text.text = answer;
break;
else
text.text = "not found";
您也可以使用 System.Linq 来帮助您: 将其放在文件的顶部。
using System.Linq;
然后使用 Linq 提供的 Contains 扩展方法:
if (guess.Contains(intext.text, StringComparison.OrdinalIgnoreCase))
text.text = answer;
else
text.text = "not found";
【讨论】:
【参考方案2】:问题是,一旦找到正确答案,就不会停止循环。
循环并不是只检查列表的最后一项,而是检查列表中的所有项目,即使它找到了您正在寻找的正确答案。
一个更好的实现应该是这样的:
void Update()
foreach (string x in guess)
if (intext.text.ToLower().Contains(x.ToLower()))
text.text = answer;
return;
text.text = "not found";
这样,仅当intext.text
不包含列表中的任何项目时,文本才会为not found
。
请注意,使用 linq, 可以写成一行代码:
text.text = guess.Any(x =>
intext.text.Equals(x, StringComparison.InvariantCultureIgnoreCase))
? answer
: "not found";
【讨论】:
以上是关于如何在统一的字符串数组列表中查找包含?的主要内容,如果未能解决你的问题,请参考以下文章
如果数组值包含字符串,则从 List<string> 中查找值 [重复]
如何在 JavaScript/jQuery 中查找数组是不是包含特定字符串?