我不确定如何解决此问题。我有一个用逗号分隔的列表(没有key:pair)。
Layman的条款,当我在列表中找到一个项目时,我想返回第4个元素。例如,如果我找到梨想要返回值0.3。
示例列表:
"Apple,P03100B0B0,,1,0.8,0,0.9,0"
"Pear,KO3100B0B0,,1,0.3,0,0.2,0"
我已经看过利用linkq了,但是还没用。
希望这样可以。
var res = listString.Select(x => x.Split(',')[4]).Select(a => a.Contains("Pear"));
答案 0 :(得分:0)
如果字符串的格式始终相同,则只需将字符串拆分为数组并获取4个元素。
类似这样的东西:
string[] result = yourString.Split(',');
if(result[0].ToString() == "Pear")
{
string finalresult = result[3].ToString();
}
答案 1 :(得分:0)
因此,您是正确的,首先需要.Split
您的listString。由于它可能包含空元素,因此请将其删除。然后检查拆分列表中是否包含“ Pear”之类的特定元素,然后选择第4个元素(如果列表中包含第4个元素)
var str = "Pear,KO3100B0B0,,1,0.3,0,0.2,0";
var res = str.Split(',').Where(x => !string.IsNullOrEmpty(x)).ToArray();
if(res.Contains("Pear") && res.Length > 2){
Console.WriteLine(res[3].ToString());
}
注意:索引数组时,它们基于0。
答案 2 :(得分:0)
出于可读性考虑,我可以这样做:
foreach(var item in listString)
{
var segments = item.Split(',');
if(segments[0] == "Pear") // change how you do this comparison according to your needs
// do something with segments[4]
}
...可能会增加一些处理,以防字符串格式错误。例如,要忽略无法处理的行,可以在分割字符串后添加以下内容:
if(segments.Length < 5) continue;
这将处理空行和行,但它们的值不足以使下一步变得有意义。 continue
只是跳到foreach
循环中的下一项。
您可能会找到一种在一行上完成所有这些操作的方法,但是这将花费更长的时间写,更长的时间读和相同的执行时间。想象一下自己遇到了一些您必须理解或维护的代码-您希望看上面的代码还是较长的单行LINQ查询?
答案 3 :(得分:0)
您可以在LINQ中执行此操作。您可以使用Select
拆分列表,然后,如果拆分列表包含您的密钥(在本例中为“ Pear”),则选择拆分列表的索引4
。对于您的样本数据,这将返回1个字符串的列表:{ "0.3" }
。如果没有结果,列表将返回Count
为0。
var res = listString
.Select(x => x.Split(','))
.Where(x => x.Contains("Pear"))
.Select(x => x[4])
.ToList();
如果由于拥有受控数据集而只希望第一个结果或仅希望一个结果,请将.ToList();
替换为.FirstOrDefault();
以仅返回字符串值("0.3"
)。如果您的搜索关键字不匹配,则字符串值为null
。