在包含值的字符串数组中查找字符串的最后一个索引

本文关键字:字符串 最后一个 索引 查找 数组 包含值 | 更新日期: 2023-09-27 18:13:31


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

示例:

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(("似乎对我来说都不是正确的命令,因为它会寻找给定值和数组中项的相等性。

我做错了什么吗?或者在这种情况下还有其他命令吗?

在包含值的字符串数组中查找字符串的最后一个索引

我不明白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"。

如果用List<T>替换数组,您将得到一个不错的FindLastIndex()方法,这正是您想要的:

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

您可以使用List<T>而不是Array。这将暴露FindLastIndex()方法,该方法将完全符合您的需求

使用Linq可以反转数组。

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

不过,一定要更改位置。因此,它将与实际阵列兼容。类似于:pos = (text.Length-1-pos)

文档链接

输入是一个数组。所以首先你必须把它转换成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"));