我有一个包含以下值的字符串:
0:12211,90:33221,23:09011
在每对中,第一个值(在:
(冒号)之前)是雇员ID,后面的第二个值是工资单ID。
因此,如果我想获得员工ID 23的工资单ID,我必须这样做:
var arrayValues=mystring.split(',');
然后为每个arrayValues
做同样的事情:
var employeeData = arrayValue.split(':');
这样我就会得到钥匙和价值。
有没有办法通过使用lambda来获取给定员工ID的工资核算?
如果employeeId不在字符串中,那么默认情况下它应该返回employeeid 0的payrollid。
答案 0 :(得分:1)
你可以尝试类似的东西
"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();
您必须了解数据的验证
答案 1 :(得分:1)
如果我是你,我会使用字典。特别是如果你要进行多次查找。
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<string, string>
,可以删除这些来电。
答案 2 :(得分:1)
使用Linq管道和匿名对象:
Additional information: StandardOut has not been redirected or the process hasn't started yet
结果如下:
"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] })
Where
的任何过滤逻辑
答案 3 :(得分:0)
您可以将string.Split
与string.Substring
一起使用。
var result =
str.Split(',')
.Where(s => s.Substring(0,s.IndexOf(":",StringComparison.Ordinal)) == "23")
.Select(s => s.Substring(s.IndexOf(":",StringComparison.Ordinal) + 1))
.FirstOrDefault();
如果这个逻辑不止一次使用,那么我就把它放到一个方法中:
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();
}
答案 4 :(得分:0)
假设你在字符串中有三对以上(该字符串有多长?),你可以将它转换为Dictionary
并继续使用它。
首先,在逗号上split
,然后在冒号上放入Dictionary
:
var empInfo = src.Split(',').Select(p => p.Split(':')).ToDictionary(pa => pa[0], pa => pa[1]);
现在,您可以编写一个函数来查找员工ID中的工资核算ID:
string LookupPayrollID(Dictionary<string, string> empInfo, string empID) => empInfo.TryGetValue(empID, out var prID) ? prID : empInfo["0"];
你可以打电话来得到答案:
var emp23prid = LookupPayrollID(empInfo, "23");
var emp32prid = LookupPayrollID(empInfo, "32");
如果你在字符串中只有三名雇员,那么创建一个Dictionary
可能是过度的,而一个更简单的答案可能是合适的,例如搜索字符串。