【问题标题】:Does Array provide a way to search for index of an element with arbitrary logic [duplicate]Array 是否提供了一种方法来搜索具有任意逻辑的元素的索引 [重复]
【发布时间】:2019-12-20 12:42:47
【问题描述】:

是否有任何基于 lambda 的方法可以让人们根据自定义逻辑找到数组中元素的(第一次)出现的索引?

我知道我可以使用 Array.First 找到 元素 本身,但是我可以在不手动迭代数组的情况下找到该元素的索引吗?

【问题讨论】:

  • 你的意思是你想通过它的值找到特定元素的索引?
  • 您的意思是基于属性值?对象本身有Array.IndexOf
  • Array.IndexOf ?
  • ArrayList 都有方便的方法;有关对任何 IEnumerable 执行此操作的更一般性问题,请参阅 this(所有这些答案都可以轻松扩展到谓词而不是特定值,如果需要)。
  • 如果调用 Array.IndexOf(),则迭代会通过数组进行。但是,如果我正确理解了这个问题,您需要您要查找的第一项的索引。但是您不想遍历整个数组或数组的一部分。不幸的是,如果元素不在数组的开头或结尾,这是不可能的。这是由于数组的构建机制。

标签: c# .net


【解决方案1】:

您可以使用Array.IndexOf()。示例:

var array = new string[] { "one", "two", "three" };
var index = Array.IndexOf(array, "two");
// index = 1

【讨论】:

    【解决方案2】:

    您可以使用Array.IndexOf() “搜索指定的对象并返回其第一次出现的索引在一维数组或数组中的一系列元素中。 " :

    var foo = new int [] { 10, 42, 42, 51, 42, 100 };
    
    Console.WriteLine(Array.IndexOf(foo, 42)); // output is 1
    

    虽然这将在后台进行迭代,但您不必手动[迭代]数组

    【讨论】:

      【解决方案3】:

      你可以这样做:

      var s = new string[] {"foo", "bar"};
      var index = Array.FindIndex(s, s1 => s1 == "foo"); // returns 0
      

      注意:如果未找到该元素,它将返回 -1

      【讨论】:

      • 我确定存在某些东西,但忘记检查静态成员。为什么我想知道它只能通过这种方式获得吗?
      【解决方案4】:

      还有 Array.IndexOf 方法。

      以下代码:

          String[] strings = { "the", "quick", "brown", "fox", "jumps",
                       "over", "the", "lazy", "dog", "in", "the",
                       "barn" };
          Console.WriteLine(Array.IndexOf(strings, "dog"));
      

      将输出 8。

      MSDN:https://docs.microsoft.com/en-us/dotnet/api/system.array.indexof

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-11
        • 1970-01-01
        • 1970-01-01
        • 2015-04-18
        相关资源
        最近更新 更多