遇到以下情况:
我有两套。带有以下文件的“列表A”:ID,NAME,VALUES,其中ID和NAME的组合是唯一的,以及“列表B”,其中包含ID,NAME,OVERRIDEN_VALUES。
我要实现的是以最快的方式处理两个列表中的项目。
当前实施如下:
1)我进行了以下查找,其中的键可能只包含名称,只包含ID或两者都包含(并且可以重复)
stringArray2.All(x => stringArray1.Contains(x))
2)OverrideKey实现:
var lookup = overrides
.ToLookup(item => new OverrideKey(item.NAME, item.ID));
3)然后,我有一个要匹配的项目列表,必须从覆盖查找中找到所有匹配项
public class OverrideKey
{
public OverrideKey(string name= null, string id= null)
{
NAME = name ?? string.Empty;
ID = id ?? string.Empty;
}
public string NAME { get; private set; }
public string ID { get; private set; }
public override bool Equals(object obj)
{
var otherKey = obj as OverrideKey;
return !ReferenceEquals(otherKey, null) &&
(NAME == otherKey.NAME|| ID == otherKey.ID);
}
public override int GetHashCode()
{
var hashCode = 17;
hashCode = (hashCode * 37) ^ ID.GetHashCode();
hashCode = (hashCode * 37) ^ NAME.GetHashCode();
return hashCode;
}
}
让我感到困扰的是,在第3点中,我必须为itemsToMatch中的每个单个项目创建密钥,很难相信它不能更有效地完成,但是不幸的是,我目前还不知道如何做。 / p>
更新 提供样本输入:
样本替代(空=任何)
foreach (var item in itemsToMach)
{
var matchingOverrides = overrides[new OverrideKey(name: item.NAME)]
.Union(overrides[new OverrideKey(id: item.ID)])
.Union(overrides[new OverrideKey(item.NAME, item.ID)]);
[do stuff]
}
“ ItemsToMatchWith”示例
PROPERTY ORIGINAL_VALUE OVERRIDE_VALUE NAME ID
A 16 13 SMH19
A 16 13 SMZ18
B CRE BKP350LDN6589897
B CCC TABAU_USD_DFS_MR14
A 4 10 28905418 TABAU_USD_DFS_MR14
A 4 10 107029271 TABAU_USD_DFS_MR14
C RES 1 106863631 XSNOREFOBL00