循环遍历List <string>但只占用每个字符串的一部分

时间:2017-06-15 21:32:46

标签: c# list linq

我想知道是否有人可以帮助我,我试图遍历一个字符串列表但只占用“:”左边的部分但不包括“:”我可以用下面的方法做到这一点但是我试图通过使用Linq来实现这一点。任何帮助将不胜感激。

        List<string> Results = new List<string>();

        List<string> strings = new List<string>
        {
            "121:sdfdsfds",
            "122:sdfdsfds",
            "123:sdfdsfds"
        };

        for (var i = 0; i < strings.Count; i++)
        {
            string[] tokens = strings[i].Split(':');
            if (tokens.Any())
            {
                Results.Add(tokens[0]);
            }
        }

5 个答案:

答案 0 :(得分:3)

使用Select方法(System.Linq命名空间)

class Program
{
    static void Main(string[] args)
    {
        List<string> strings = new List<string>
        {
            "121:sdfdsfds",
            "122:sdfdsfds",
            "123:sdfdsfds"
        };

        List<string> Results = strings
            .Select(s => s.Split(':')[0])
            .ToList();

        Results.ForEach(s => Console.WriteLine(s));

        Console.ReadKey();
    }
}

输出:

  

121
  122个
  123

答案 1 :(得分:3)

方法链语法:

List<string> Results = strings.Select(t => t.Split(':'))
       .Where(tokens => tokens.Any())
       .Select(tokens => tokens[0]).ToList();

查询语法:

List<string> Results = (from t in strings
    select t.Split(':')
    into tokens
    where tokens.Any()
    select tokens[0]).ToList();

答案 2 :(得分:1)

List<string> Results = strings
    .Select(item => item.Split(':').FirstOrDefault())
    .Where(item => item != null).ToList();

答案 3 :(得分:1)

您可以获取字符串数组中的每个项目,将其拆分,并在select语句中返回index [0]:

var results = strings.Select(i => i.Split(':')[0]).ToList();

如果某些项目可能是空的并且您不想包含它们,则可以在string.Split方法上使用此语法:

var results = strings
    .Select(i => i.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries)
        .FirstOrDefault())
    .Where(i => i != null)
    .ToList();

答案 4 :(得分:0)

使用forEach,         strings.ForEach(x => Results.Add(x.Split(':')[0]));