簡體   English   中英

在字符串數組中查找下一個匹配項的索引和值

[英]Find index and value of next match in string array

我一直在尋找很長一段時間,以找到比我的智能解決方案更智能的解決方案,以收集數組中一項的索引和值。 我不能直接在項目上搜索,因為字符串中總會有其他字符。 這是我想做的一個例子。

// logcontent = ["f", "red", "frs", "xyr", "frefff", "xdd", "to"]
string lineData = "";
int lineIndex = 0;
foreach (var item in logContent.Select((value, index) => new { index, value }))
{
    string line = item.value;
    var index = item.index;

    if (line.Contains("x"))
    {
        lineData = line;
        lineIndex = index; 
        break;
    }
}

我只想拿下一件

lineData = "xyr";
lineIndex = 3;

使用linq的FirstOrDefault

var result = logContent.Select((value, index) => new { index, value })
                       .FirstOrDefault(item => item.value.Contains("x"));

如果沒有這樣的項目,您將得到null

如果使用C#7.0,則可以使用命名元組

(int lineIndex, string lineData) = logcontent.Select((value, index) => (index, value))
                                             .FirstOrDefault(item => item.value.Contains("x"));

然后直接使用lineIndexlineData進行操作,就像使用原始版本一樣

如果我理解正確的問題,則要在字符串數組中包含下一個包含“ x”的字符串。

 var result = logContent.Select((value, index) => new { index, value })
                        .First(x => x.value.Contains("x");

這是Array.FindIndex的另一種方法-比Linq版本的性能更好

string[] logContent = { "f", "red", "frs", "xyr", "frefff", "xdd", "to" };  

int lineIndex  = Array.FindIndex(logContent, x => x.Contains("x"));
string lineData = lineIndex >= 0 ? logContent[lineIndex] : null;

此代碼

string[] ogcontent = {"f", "red", "frs", "xyr", "frefff", "xdd", "to"};
    string lineData = "";
    int lineIndex = 0;
    for (int i = 0; i < ogcontent.Length; i++)
    {
        string line = ogcontent[i];
        var index = i;

        if (line.Contains("x"))
        {
            lineData = line;
            lineIndex = index; 
            Console.WriteLine("index = {0}", i);
            Console.WriteLine("value = {0}", line);
            break;
        }
    }

結果

index = 3
value = xyr

工作樣本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM