Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C Lambda拆分字符串和搜索值_C#_Linq_Lambda - Fatal编程技术网

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与此有何关系?