C# 使用C Lambda拆分字符串和搜索值
我有一个具有以下值的字符串:C# 使用C Lambda拆分字符串和搜索值,c#,linq,lambda,C#,Linq,Lambda,我有一个具有以下值的字符串: 0:12211,90:33221,23:09011 在每一对中,冒号前面的第一个值是员工id,后面的第二个值是工资单id 因此,如果我想立即获取员工id 23的工资单id,我必须执行以下操作: var arrayValues=mystring.split(','); 然后对每个ArrayValue执行相同的操作: var employeeData = arrayValue.split(':'); 这样我就可以得到密钥和值 有没有办法使用lambda通过给定的员
0:12211,90:33221,23:09011
在每一对中,冒号前面的第一个值是员工id,后面的第二个值是工资单id
因此,如果我想立即获取员工id 23的工资单id,我必须执行以下操作:
var arrayValues=mystring.split(',');
然后对每个ArrayValue执行相同的操作:
var employeeData = arrayValue.split(':');
这样我就可以得到密钥和值
有没有办法使用lambda通过给定的员工ID获取工资单ID
如果employeeId不在字符串中,那么默认情况下,它应该返回employeeId 0 0的payrollid。您可以尝试类似的方法
"0:12211,90:33221,23:09011"
.Split(new char[] { ',' })
.Select(c => {
var pair = c.Split(new char[] { ':' });
return new KeyValuePair<string, string>(pair[0], pair[1]);
})
.ToList();
您必须了解数据的验证您可以尝试类似的方法
"0:12211,90:33221,23:09011"
.Split(new char[] { ',' })
.Select(c => {
var pair = c.Split(new char[] { ':' });
return new KeyValuePair<string, string>(pair[0], pair[1]);
})
.ToList();
您必须了解数据的验证您可以使用string.Split和string.Substring
如果这个逻辑将被多次使用,那么我将把它放在一个方法中:
public string GetPayrollIdByEmployeeId(string source, string employeeId){
return source.Split(',')
.Where(s => s.Substring(0, s.IndexOf(":", StringComparison.Ordinal)) == employeeId)
.Select(s => s.Substring(s.IndexOf(":", StringComparison.Ordinal) + 1))
.FirstOrDefault();
}
可以使用string.Split和string.Substring
如果这个逻辑将被多次使用,那么我将把它放在一个方法中:
public string GetPayrollIdByEmployeeId(string source, string employeeId){
return source.Split(',')
.Where(s => s.Substring(0, s.IndexOf(":", StringComparison.Ordinal)) == employeeId)
.Select(s => s.Substring(s.IndexOf(":", StringComparison.Ordinal) + 1))
.FirstOrDefault();
}
如果我是你,我会用字典。特别是如果你要做不止一次的查找
Dictionary<int, int> employeeIDToPayrollID = "0:12211,90:33221,23:09011"
.Split(',') //Split on comma into ["0:12211", "90:33221", "23:09011"]
.Select(x => x.Split(':')) //Split each string on colon into [ ["0", "12211"]... ]
.ToDictionary(int.Parse(x => x[0]), int.Parse(x => x[1]))
现在,您只需编写employeeIDtoPayrollID[0]即可获取12211。请注意,如果ID不是整数,int.Parse将引发异常。如果你想拥有一本字典,你可以删除这些呼叫。如果我是你,我会使用字典。特别是如果你要做不止一次的查找
Dictionary<int, int> employeeIDToPayrollID = "0:12211,90:33221,23:09011"
.Split(',') //Split on comma into ["0:12211", "90:33221", "23:09011"]
.Select(x => x.Split(':')) //Split each string on colon into [ ["0", "12211"]... ]
.ToDictionary(int.Parse(x => x[0]), int.Parse(x => x[1]))
现在,您只需编写employeeIDtoPayrollID[0]即可获取12211。请注意,如果ID不是整数,int.Parse将引发异常。如果您想拥有字典,可以删除这些调用。使用Linq管道和匿名对象:
"0:12211,90:33221,23:09011"
.Split(',')
.Select(x => x.Split(':'))
.Select(x => new { employeeId = x[0], payrollId = x[1] })
.Where(x=> x.employeeId == "23")
结果如下:
{
employeeId = "23",
payrollId = "09011"
}
这三行代表您的数据处理和投影逻辑:
.Split(',')
.Select(x => x.Split(':'))
.Select(x => new { employeeId = x[0], payrollId = x[1] })
然后,您可以添加任何过滤逻辑,在此之后,使用Linq管道和匿名对象进行第二次选择:
"0:12211,90:33221,23:09011"
.Split(',')
.Select(x => x.Split(':'))
.Select(x => new { employeeId = x[0], payrollId = x[1] })
.Where(x=> x.employeeId == "23")
结果如下:
{
employeeId = "23",
payrollId = "09011"
}
这三行代表您的数据处理和投影逻辑:
.Split(',')
.Select(x => x.Split(':'))
.Select(x => new { employeeId = x[0], payrollId = x[1] })
然后,您可以添加任何过滤逻辑,在此之后第二次选择假设字符串中有三对以上,那么该字符串有多长?您可以将其转换为字典,并继续使用 首先,在逗号上拆分,然后在冒号上拆分,并放入字典: 现在,您可以编写一个函数,从员工ID查找工资单ID:
string LookupPayrollID(Dictionary<string, string> empInfo, string empID) => empInfo.TryGetValue(empID, out var prID) ? prID : empInfo["0"];
如果字符串中只有三个雇员,那么创建一个字典可能会有些过分,一个更简单的答案可能是合适的,比如搜索字符串。假设字符串中有三对以上的雇员,那么该字符串有多长?您可以将其转换为字典,并继续使用 首先,在逗号上拆分,然后在冒号上拆分,并放入字典: 现在,您可以编写一个函数,从员工ID查找工资单ID:
string LookupPayrollID(Dictionary<string, string> empInfo, string empID) => empInfo.TryGetValue(empID, out var prID) ? prID : empInfo["0"];
如果字符串中只有三名员工,那么创建字典可能会有些过火,更简单的答案可能会更合适,例如搜索字符串。看起来不错,如果employeeid不在字符串中,我如何返回12211的值。。因此,employeeid 0的默认payrollid为12211。直接在payrollid=x[1]行中添加逻辑看起来不错,如果employeeid不在字符串中,我如何返回12211的值。。因此,employeeid 0的默认payrollid为12211。直接在payrollid=x[1]行中添加该行的逻辑。lambda与此有何关系?lambda与此有何关系?