使用 LINQ 时如何返回访问拆分字符串?

Posted

技术标签:

【中文标题】使用 LINQ 时如何返回访问拆分字符串?【英文标题】:How to return an access a split string while using LINQ? 【发布时间】:2017-01-02 13:27:55 【问题描述】:

我有一个正在使用 File.ReadLines(filepath) 读取的文本文件。它充满了使用 : 分隔的名字和姓氏。有没有一种使用 LINQ 的方法,我可以在 foreach 循环中访问返回的数据类型的名字和姓氏?

// john:doe
// david:smith
// michael:rogers

var Names = File.ReadLines(filepath)
    .Select(line => line.Split(':'));

foreach (var list in Names) 
listbox1.Items.Add(list); //(first name) before : 
listbox2.Items.Add(list); //(last name) after :

【问题讨论】:

多列ListBox? 【参考方案1】:

嗯,你快到了。您所缺少的只是从数组中的第一项中获取 firstName 并在第二项中获取姓氏。

foreach (var list in Names) 

    listbox1.Items.Add(list[0]); //(first name) before : 
    listbox2.Items.Add(list[1]); //(last name) after :

【讨论】:

【参考方案2】:

list[0] 是第一个,list[1] 是第二个

listbox1.DataSource = Names.Select(a => a[0]).ToArray();
listbox2.DataSource = Names.Select(a => a[1]).ToArray();

【讨论】:

【参考方案3】:

根据您的示例,我认为它是不是多列ListBox

使用SelectMany 在拆分后展平层次结构。

listbox1.DataSource = File.ReadLines(filepath)
                          .SelectMany(line=>line.Split(':'));

或者,使用AddRange 方法并执行此操作

 ListBox1.Items.AddRange(File.ReadLines(filepath)
                             .SelectMany(line=>line.Split(':')
                             .Cast<object>()  // I think this is redundant remove if not required.
                             .ToArray()
                        );

【讨论】:

以上是关于使用 LINQ 时如何返回访问拆分字符串?的主要内容,如果未能解决你的问题,请参考以下文章

使用 LINQ 拆分集合

在特定字符处拆分字符串但忽略某些情况 C# LINQ

“表达式树可能不包含使用可选参数的调用或调用”在带有拆分字符串实体的 LINQ 表达式中?

你如何在 C++ 中拆分数组?

如何使用 LINQ 从列表中选择各种长度的部分 [关闭]

如何使用正则表达式拆分字符串以返回值列表?