列表-以逗号分隔-返回特定元素的位置

时间:2019-05-22 14:08:11

标签: c#

我不确定如何解决此问题。我有一个用逗号分隔的列表(没有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"));

4 个答案:

答案 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