如何在统一的字符串数组列表中查找包含?

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 中查找数组是不是包含特定字符串?

我想返回一个字符串数组列表,其中包含响应代码为 200 的响应中的用户名 [关闭]

如何使用Java中的给定字符串值从数组列表中查找最长前缀?

使用字符串数组从书籍列表中查找书籍

直接查找子字符串是不是是列表/数组的一部分