你好,我有一個字串
BRC CORP---BRC SME,BRC SME---BRC CORP,Confirmation of Customer Contact,Confirmation of Suitability Check,Consent,Driver's License---National Id Card,National Id Card---Driver's License,Residence certificate
現在我需要將其轉換為下面的串列。
using System.Collections.Generic;
using System.Linq;
try
{
string mondantory_docs=Batch.Properties.Get("MissingDocCheck");
List<string> result = mondantory_docs.Split(',').ToList();
}
catch
{
}
但是我有一個問題,我找不到方法。BRC CORP---BRC SME 并且BRC SME---BRC CORP通常是相同的。所以我需要從串列中洗掉其中之一。結果我想在下面。
BRC CORP---BRC SME,Confirmation of Customer Contact,Confirmation of Suitability Check,Consent,Driver's License---National Id Card,Residence certificate
如何從串列中洗掉這種重復項
謝謝
親切的問候
uj5u.com熱心網友回復:
拆分字串后,將其添加到串列中,而不是將其添加到 HashSet。然后將其轉換為串列。這應該洗掉重復項。
uj5u.com熱心網友回復:
肯定有很多方法可以做到這一點,所以我完全期待這里有一系列的答案..
將它們拆分為“---”并查看它們是否排序后的序列如何?
string mondantory_docs=Batch.Properties.Get("MissingDocCheck");
List<string> result = mondantory_docs.Split(',').ToList();
var a = result[0].Split("---").OrderBy(x => x);
var b = result[1].Split("---").OrderBy(x => x);
if(a.SequenceEqual(b))
result.RemoveAt(1);
或者您可以查看 except 的結果是否有任何內容(并且它們的長度相同 - 我沒有進行此檢查,因為在您的示例資料中它們是):
var a = result[0].Split("---");
var b = result[1].Split("---");
if(!a.Except(b).Any())
result.RemoveAt(1);
或者,如果第一個中的所有內容都在第二個中(并且它們的長度相同 - 我沒有進行此檢查,因為在您的示例資料中它們是):
var a = result[0].Split("---");
var b = result[1].Split("---");
if(a.All(aa => b.Contains(aa)))
result.RemoveAt(1);
或者..
您選擇的內容可能取決于后續會發現的進一步細微之處,具體取決于資料的混亂程度!:D
(根據唯一示例進行回答很棘手;如果您有更多示例,請發布更多示例)
uj5u.com熱心網友回復:
您可以使用MoreLinq Nuget 包并使用 IEnumerable.DistinctBy(str => str)。
此方法將回傳唯一物件的串列,例如:
var list = new List<String>{"AB","BC","CB","AB","BA","BC","CB","AB" };
var distinctObjects = list.DistinctBy(ch => ch).ToList();
distinctObjects 將包含 4 個物件:{AB, BC, CB, BA}。
uj5u.com熱心網友回復:
一種簡單的方法是回圈遍歷元素并保留一個標志來檢查兩個字串BRC CORP---BRC SME和BRC SME---BRC CORP之間的任何條目 是否已經找到。對于第一次匹配,我們將反轉標志并保留串列中的條目,而對于所有其他匹配,我們可以洗掉字串。
代碼會像這樣 -
List<string> result = mondantory_docs.Split(",").ToList();
bool flag = false;
for (int i = 0; i < result.Count; i)
{
var doc = result[i];
if (doc.Equals("BRC CORP---BRC SME") || doc.Equals("BRC SME---BRC CORP"))
{
if (flag)
flag = true;
else
result.RemoveAt(i);
}
}
uj5u.com熱心網友回復:
嘗試這個
var list = mondantory_docs.Split(',').ToList();
var duplicates = list.Where(i => i.Contains("---")).ToList();
for (var i = 0; i < duplicates.Count; i )
for (var j = i 1; j < duplicates.Count; j )
{
if( duplicates[j].Contains(duplicates[i].Substring(0,duplicates[i].IndexOf("---")) ))
duplicates.Remove(duplicates[j]);
}
List<string> resultList = list.Except(duplicates);
string resultString = string.Join(",",resultList);
結果字串
BRC SME---BRC CORP,Confirmation of Customer Contact, Confirmation of Suitability Check,Consent,National Id Card---Driver's License, Residence certificate
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317064.html
標籤:C#
上一篇:部分實體化
