【问题标题】:Find last index of string in string array containing a value在包含值的字符串数组中查找字符串的最后一个索引
【发布时间】:2015-12-15 10:06:47
【问题描述】:


在我的程序中,我有一个文本,我将其拆分为一个行数组以分别修改这些行。 对于一个修改,我需要在文本中找到一个值的最后一个索引,以便在下面的行中插入一个新值。

例子:

text=["I like bananas",
      "I like apples",
      "I like cherries",
      "I like bananas",
      "I like apples"]

value: "bananas"

我已经试过了:

int pos = Array.FindIndex(text, row => row.Contains(value));
if (pos > -1)
{
 //insert line at pos
}

但这似乎返回了我第一次出现的索引。 "lastIndexOf()" 似乎对我来说都不是正确的命令,因为它会寻找给定值和数组中项目的相等性。

是我做错了什么还是有其他命令可以在这种情况下使用?

【问题讨论】:

    标签: c# .net arrays indexing contain


    【解决方案1】:

    如果你用List<T> 替换你的数组,你会得到一个很好的FindLastIndex() 方法,这正是你要找的:

    var texts = new List<string>(...);
    var bananaIndex = texts.FindLastIndex(s => s.Contains("banana"));
    

    【讨论】:

      【解决方案2】:

      您可以使用List&lt;T&gt; 代替Array。这将暴露 FindLastIndex() 方法,这将完全满足您的需要

      【讨论】:

        【解决方案3】:

        使用Linq,您可以反转数组。

        int pos = Array.FindIndex(text.Reverse(), row => row.Contains(value));
        if (pos > -1)
        {
         //insert line at pos
        }
        

        请确保您更改了位置。所以它将与实际的数组兼容。类似于: pos = (text.Length-1-pos)

        Link to documentation

        【讨论】:

          【解决方案4】:

          我不明白Array.FindLastIndex() 方法有什么问题。它的工作方式完全相同:

          string value = "bananas";
          string[] arr = 
          {
              "I like bananas", 
              "I like apples",
              "I like cherries",
              "I like bananas",
              "I like apples"
          };
          
          Console.WriteLine(Array.FindLastIndex(arr, x => x.Contains(value)));
          

          此代码适用于我并输出“3”。

          【讨论】:

          • 是的,你是对的。似乎我试图以不同于 findIndex 方法的方式使用此方法。谢谢!
          【解决方案5】:

          输入是一个数组。所以首先你必须把它转换成List()

          string[] myArray= new string[]{"I like bananas",
            "I like apples",
            "I like cherries",
            "I like bananas",
            "I like apples"};
          var pos = myArray.ToList().FindLastIndex(x => x.Contains("banana"));
          

          或者你可以申请

          var pos =Array.FindLastIndex(myArray,x => x.Contains("banana"));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-19
            • 1970-01-01
            • 2013-02-05
            • 2012-03-23
            • 1970-01-01
            相关资源
            最近更新 更多