[英]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"));
然后直接使用lineIndex
或lineData
進行操作,就像使用原始版本一樣
如果我理解正確的問題,則要在字符串數組中包含下一個包含“ 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.