如何根据特定值从数组中获取数据
How to get data from array based on a specific value
我在 C# 中工作,但在导入数据时遇到了问题。
我有一个包含数据的 txt 文档:
S/1234 001 2583 2 0 3
S/1234 002 4323 2 0 3
S/1234 003 4583 2 0 3
S/2582 001 8745 3 0 4
S/2582 002 8254 3 0 4
S/2582 003 658T 3 0 4
S/2582 004 8785 3 0 4
我将此文档导入到列表中:
S/1234 2583
S/1234 4323
S/1234 4583
S/2582 8745
S/2582 8254
S/2582 658T
S/2582 8785
代码如下所示:
string[] lines = System.IO.File.ReadAllLines(@fileLocal);
List<string> whole_line = new List<string>();
List<string> only_first_column = new List<string>();
foreach (string line in lines)
{
string[] linee=line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
whole_line.Add(linee[0].ToString()+" "+linee[2].ToString());
only_first_column.Add(linee[0].ToString());
}
现在,我的问题是,如何获取数据并将其按值 S/1234 和 S/2582 存储在两个 arrays/or 列表中?
我正在尝试获取数组 #1:
2583 4323 4583
和数组#2:
8745 8254 658T 8785
提前谢谢你:)
如果您只有 S/1234 和 S/2582 这两个值,您可以用一种简单的方法来完成。
string[] lines = System.IO.File.ReadAllLines(@fileLocal);
List<string> s1234 = new List<string>();
List<string> s2582 = new List<string>();
foreach (string line in lines)
{
string[] linee = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
if(linee[0].ToString() == "S/1234"){
s1234.Add(linee[2].ToString());
}else{
s2582.Add(linee[2].ToString());
}
}
请记住,这是一个非常基本的解决方案,假设您只想处理这 2 个键,如果您的目标更通用,它将不起作用
使用 linq:
var groups = lines.GroupBy(x => x.Split(' ').First());
string[] array1 = groups.Where(x => x.Key == "S/1234")
.SelectMany(x => x).Select(x => x.Split(' ')[2]).ToArray();
string[] array2 = groups.Where(x => x.Key == "S/2582")
.SelectMany(x => x).Select(x => x.Split(' ')[2]).ToArray();
我在 C# 中工作,但在导入数据时遇到了问题。
我有一个包含数据的 txt 文档:
S/1234 001 2583 2 0 3
S/1234 002 4323 2 0 3
S/1234 003 4583 2 0 3
S/2582 001 8745 3 0 4
S/2582 002 8254 3 0 4
S/2582 003 658T 3 0 4
S/2582 004 8785 3 0 4
我将此文档导入到列表中:
S/1234 2583
S/1234 4323
S/1234 4583
S/2582 8745
S/2582 8254
S/2582 658T
S/2582 8785
代码如下所示:
string[] lines = System.IO.File.ReadAllLines(@fileLocal);
List<string> whole_line = new List<string>();
List<string> only_first_column = new List<string>();
foreach (string line in lines)
{
string[] linee=line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
whole_line.Add(linee[0].ToString()+" "+linee[2].ToString());
only_first_column.Add(linee[0].ToString());
}
现在,我的问题是,如何获取数据并将其按值 S/1234 和 S/2582 存储在两个 arrays/or 列表中?
我正在尝试获取数组 #1:
2583 4323 4583
和数组#2:
8745 8254 658T 8785
提前谢谢你:)
如果您只有 S/1234 和 S/2582 这两个值,您可以用一种简单的方法来完成。
string[] lines = System.IO.File.ReadAllLines(@fileLocal);
List<string> s1234 = new List<string>();
List<string> s2582 = new List<string>();
foreach (string line in lines)
{
string[] linee = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
if(linee[0].ToString() == "S/1234"){
s1234.Add(linee[2].ToString());
}else{
s2582.Add(linee[2].ToString());
}
}
请记住,这是一个非常基本的解决方案,假设您只想处理这 2 个键,如果您的目标更通用,它将不起作用
使用 linq:
var groups = lines.GroupBy(x => x.Split(' ').First());
string[] array1 = groups.Where(x => x.Key == "S/1234")
.SelectMany(x => x).Select(x => x.Split(' ')[2]).ToArray();
string[] array2 = groups.Where(x => x.Key == "S/2582")
.SelectMany(x => x).Select(x => x.Split(' ')[2]).ToArray();