我試圖找出實施以下情形的最有效的方式串:檢查列表包含匹配密切
我有一個這樣的名單:
public static IEnumerable<string> ValidTags = new List<string> {
"ABC.XYZ",
"PQR.SUB.UID",
"PQR.ALI.OBD",
};
我有一個巨大的CSV與多列。其中一列是tags
。此列包含空白值或上述值之一。問題是,標籤列可能包含「[email protected]
」等值,即有效標籤加上一些無關字符。我需要使用有效標記更新這些列,因爲它們「」與我們的有效標記之一「」非常匹配。
例子:
- 如果CSV包含
PQR.ALI.OBD?
與有效的標籤PQR.ALI.OBD
- 如果CSV包含
PQR.ALI.OBA
更新它,這是無效的,只是加後綴無效和更新PQR.ALI.OBA-invalid
。
我試圖找出最好的方法來做到這一點。
我目前的做法是:
- 迭代通過CSV每一列,獲得tagValue
- 現在檢查,如果我們的tagValue包含任何從列表
- 字符串如果它包含但不完全一樣,請用它包含的值更新它。
- 如果它不包含列表中的任何值,請添加後綴無效。
有沒有更好/更有效的方法來做到這一點?
更新:
名單隻有5個項目,我已經在這裏顯示了三個。 額外的字符只是在最後,這是因爲人們在Excel Web版本中編輯這些CSV,並弄亂了一些條目。我現在的代碼:(我敢肯定有更好的方法來做到這一點,在C#中也是新的,所以請告訴我如何改善這一點)。我正在使用CSVHelper來獲取CSV單元格。
var record = csv.GetRecord<Record>();
string tag = csv.GetField(10); //tag column number in CSV is 10
/* Criteria for validation:
* tag matches our list, but has extraneous chars - strip extraneous chars and update csv
* tag doesn't match our list - add suffix invalid.*/
int listIndex = 0;
bool valid;
foreach (var validTags in ValidTags) //ValidTags is the enum above
{
if (validTags.Contains(tag.ToUpper()) && !string.Equals(validTags, subjectIdentifier.ToUpper()))
{
valid = true;
continue; //move on to next csv row.
//this means that tag is valid but has some extra characters appended to it because of web excel, strip extra charts
}
listIndex++;
if(listIndex == 3 && !valid) {
//means we have reached the end of the list but not found valid tag
//add suffix invalid and move on to next csv row
}
}
額外的字符總是在最後? – BurnsBA
這些字面上是列表中唯一的三個項目嗎?或者任何列表項目是其他列表項目的子集(例如'ABC.XYZ'和'ABC.XYZ.PQR')? –
你能分享你目前的做法嗎? – Gianlucca