C# 列表-逗号分隔-其中返回特定元素

C# 列表-逗号分隔-其中返回特定元素,c#,C#,我不知道如何处理这个问题。我有一个以逗号分隔的列表(无键:对) 外行术语,当我在列表中找到一个项目时,我想返回第4个元素。例如,如果我找到项目Pear,我希望返回值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]).Se

我不知道如何处理这个问题。我有一个以逗号分隔的列表(无键:对)

外行术语,当我在列表中找到一个项目时,我想返回第4个元素。例如,如果我找到项目Pear,我希望返回值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"));

如果字符串的格式始终相同,只需将字符串拆分为一个数组并获取4元素

大概是这样的:

string[] result = yourString.Split(',');
if(result[0].ToString() == "Pear")
{
  string finalresult = result[3].ToString();
}
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]       
}

因此,您是正确的,您需要先
.Split
您的列表字符串。由于它可能包含空元素,请删除它们。然后检查您的拆分列表是否有特定的元素,如“Pear”,并选择第四个元素(如果列表有第四个元素)


注意:数组在索引时是基于0的。

为了可读性,我可以这样做:

string[] result = yourString.Split(',');
if(result[0].ToString() == "Pear")
{
  string finalresult = result[3].ToString();
}
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;
if(segments.Length<5)继续;
这将处理空行和没有足够值的行,以便下一步有意义
continue
只需跳到
foreach
循环中的下一项


您可能会找到一种方法在一行中完成所有这一切,但它需要更长的写入时间、更长的读取时间以及相同的执行时间。想象一下,您遇到了一些必须理解或维护的代码,您是希望看到上面的代码,还是希望看到较长的一行LINQ查询?

您可以在LINQ中执行此操作。您可以使用
Select
分割列表,然后如果分割列表包含您的键(在本例中为“Pear”),则选择分割列表的index
4
。对于示例数据,这将返回一个由1个字符串组成的列表:
{“0.3”}
。如果没有结果,则返回的列表中
计数为0

var res = listString
    .Select(x => x.Split(','))
    .Where(x => x.Contains("Pear"))
    .Select(x => x[4])
    .ToList();

如果您只需要第一个结果,或者因为有受控数据集而只需要一个结果,请替换
.ToList().FirstOrDefault()进行编码>
仅返回字符串值(
“0.3”
)。如果搜索键没有匹配项,字符串值将为
null

格式是否始终相同--搜索的键是否始终是第一个元素?或者字符串可以是
Some,Value,Pear
并且仍然匹配吗?@dvo-格式将始终相同,并且我的第一个元素将是唯一的。太好了。请参阅我的答案和代码下方关于
.FirstOrDefault()的文字
如果某个键只能有一个项目,则将
ToList
替换为
FirstOrDefault
。结果将是一个字符串,而不是字符串列表。不必使用
x.Contains(“Pear”)
检查所有列,您只需使用
x[0]==“Pear”
@OlivierJacot Descombes检查第一个元素即可。他评论说,格式将始终保持不变,这样他就可以做
x[0]==“Pear”
,并获得更快的结果!谢谢你的来信。