【问题标题】:How to search for a specific string in an string array in C# 3.0如何在 C# 3.0 中的字符串数组中搜索特定字符串
【发布时间】:2011-11-17 00:25:06
【问题描述】:

我正在尝试在 C# 中的字符串数组中搜索字符串,但我不确定如何。 那么,如果数组有 50 个元素,其中大部分为 null,我将如何在数组中搜索字符串? 例如:

string[] this_array;
this_array = new string[50];
this_array[1] = "One, Two, Three";
this_array[2] = "Foo, Bar, Five";
this_array[3] = null;

如何在 this_array 中搜索“五”?我知道我必须使用 for 循环,我只是不确定实际的代码。我必须找到确切的索引,所以我无法获得布尔值。

任何帮助将不胜感激!
杰米

更新: 到目前为止,这是我的非常不完整的代码:

for (array_number = 1; array_number < this_array.Length; array_number++)
{
  //no idea what to put here :S
}

【问题讨论】:

  • 到目前为止您尝试过什么?这是家庭作业吗?您是否尝试过使用for 循环?如果是,你到底卡在哪里? :)
  • 为什么数组的单个元素中有多个值。这是一个可怕的设计决定。
  • 我觉得你在发帖之前实际上并没有费心在搜索引擎上搜索这类问题。我刚刚在谷歌中输入了一个关于在字符串中查找文本的问题,并且我正在寻找正确的结果。您还应该查看 for 循环的工作原理。
  • 我承认这很可怕,但我对 C# 很陌生。是的,这是家庭作业。

标签: c# arrays search c#-3.0 for-loop


【解决方案1】:

使用 Linq。这是最简单且不易出错的方法。

在顶部添加 using 语句:

using System.Linq;

然后像这样搜索。

var result = this_array.Where(x => x != null && x.Contains("string to compare"));

if (result != null) System.Writeln(result.First());

【讨论】:

  • OP 正在寻找“包含”搜索而不是精确搜索
  • 仅在整个字符串与搜索字符串匹配的情况下有效 - 如问题中所述,找不到“五”。
  • @pstrjds:C# 3.0 != .NET 3.0。 C# 3 版本与 .NET 3.5 同步发布,其中包含 LINQ。
  • downvoted 因为它没有回答问题并使用 Linq,它(除非我弄错了)在 .Net 3.0 中不可用,这个问题被明确标记为,甚至在问题标题中说明.
  • @Marc 我的错,我只是用谷歌搜索了一下,发现你是对的。我认为 C# 3.0 等同于 .Net 3.0。很高兴编号一致:) 答案仍然没有处理问题的包含部分。
【解决方案2】:

这里有一些示例代码供您参考。这将找到匹配条目的第一个索引。

int foundIndex = -1;
for(int i=0; i < this_array.Length; ++i)
{
    if (!string.IsNullOrEmpty(this_array[i]) && this_array[i].Contains(searchString))
    {
        foundIndex = i;
        break;
    }
}

【讨论】:

    【解决方案3】:

    你可以试试这个……

    int index = -1;
    string find = "Five";
    
    for(int i = 0; i < this_array.Length; i++)
    {
       if(string.IsNullOrEmpty(this_array[i]))
          continue;
       if(this_array[i].ToLowerInvariant().Contains(find.ToLowerInvariant()))
       {
          index = i;
          break;
       }
    }
    

    注意:我的搜索不区分大小写。如果您关心字符的大小写,请删除 .ToLowerInvariant() 的两个实例

    【讨论】:

    • 您可能还想在查找字符串上执行ToLowerInvariant
    • 为什么你不只是将 (!string.IsNullOrEmpty(this_array[i])) 添加到包含条件。当然,还有像法比奥建议的更好的方法。由于技术差,我不得不投反对票。
    • 谢谢@musefan,但这似乎不起作用 - 它处理得很好(即没有输出任何错误)但它没有找到字符串。
    • 如果您确实关心剩余的不区分大小写,最好在 for 循环边界之外的 find 字符串上执行 ToLowerInvariant,因为它的值是常量整个循环。无需在循环中重复执行该操作。
    【解决方案4】:

    由于这是家庭作业,我建议您熟悉 String 类中可用的方法:

    String Methods

    MSDN 是你的朋友。

    【讨论】:

      【解决方案5】:
      for(int i=1;i<this_array.length;i++)
          if(this_array[i]!=null)
              if(this_array[i].indexOf("Five")>-1
                  return i;
      

      这大概是 C# 代码 - 我可能犯了一些小错误。但你肯定可以自己实现这一点。另外,我认为可能有更好的方法来做到这一点。

      【讨论】:

      • 无法编译,如果编译成功,您可能会使用错误的搜索字符串命中索引越界错误
      • 这只是粗略的。它会起作用的。这是最快的打字方式。它应该指向正确的解决方案。
      猜你喜欢
      • 2020-09-29
      • 1970-01-01
      • 2014-05-27
      • 2023-04-05
      • 2011-07-22
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多