.net 字典中的部分搜索

n3schb8v  于 2022-12-24  发布在  .NET
关注(0)|答案(1)|浏览(112)

我有这样一个场景:字典A的key存储为-'employeeId,cardnumber'

key                         value
'Id47835,12345', 'Emma,9843675867,Park Street'
'Id47800,4444',  'Sam,981275337,New Street'
'Id47866,41234', 'Pam,9812123337,Old Street'
'Id47866,03434', 'Jim,9866623337,Old Street'

员工ID和卡号是唯一的。
我必须将一些值与上面的字典进行比较。我将从一个.csv文件中阅读这些值。比较条件如下。
CSV文件:

EmpID     CardNumber  Name  Phone       Address
Id47835   12345       Emma  9843675867  Park Street ---- this user is present in dict A - same emp Id and same card number

Id47800   8888        Sam   981275337   New Street ----- this user is present in dict A - same emp Id and different card number

Id33333   41234       Pam   9812123337  Old Street ----- this user is present in dict A - different emp Id and same card number

ID94899   3434        Jim   9812123337  Old Street ----  this user is not present in dict A - different emp Id and different card number - leading zeroes are considered different.

目前,我正在执行以下操作:
Check if any part of a hashtable value contains certain string c#
C# - Partial Search in Hashtables

if (dictA.Keys.Cast<string>().Any(k => k.Contains(employeeID) || k.Contains(cardnumber)))
//then do something

使用这种方法,我可以检查上面提到的所有3个条件,但我的最后一个条件是失败(前导零)
当我比较卡号3434和03434时,结果为true,当然,因为我使用的是contains,而03434包含3434。
除了部分搜索词典,他们还有别的选择吗?

nhaq1z21

nhaq1z211#

可能有更有效的解决方案,但您的问题可以通过执行以下操作来解决:

if (dictA.Keys.Cast<string>().Any(k => {
    var parts = k.Split(',');
    return parts[0] == employeeID || parts[1] == cardnumber
}))

不过,对数据进行预处理要比每次搜索都要对数据进行拆分和比较好得多。解决方案假定键的格式始终为'{id},{cardNumber}',不包含空格、尾随空格等。

相关问题