标签:c net linq overlapping list
如果我有2个字符串列表
List<string> history = new List<string>(){ "AA", "BB", "CC", "AA" };
List<string> potentialNew = new List<string>(){ "CC", "AA", "DD", "EE", "FF", "AA"};
我需要一种方法来组合列表,同时防止“重叠”并保持相同的顺序.因此,在上面的示例中,将有一个组合列表:
AA, BB, CC, AA, DD, EE, FF, AA
换句话说,只有DD,EE,FF和AA被添加到历史列表中.
我一直试图解决这个问题几天,无数的搜索都没有解决问题.任何帮助将不胜感激!
解决方法:
如您在问题中提到的,这将为您提供给定输入集的预期输出:
List<string> history = new List<string>() { "AA", "BB", "CC", "AA" };
List<string> potentialNew = new List<string>() { "CC", "AA", "DD", "EE", "FF" };
var result = history.Concat(potentialNew.Where(x => !history.Contains(x)).ToList());
.Concat()
方法允许您连接两个列表.我们从potentialNew中提取第一个List中不存在的特定项目,并将它们与第一个列表连接起来.
更新:根据我们的讨论,我得出的结论是,您正在寻找以下内容:
string lastItem = history.Last();
int lastIndexToCheck=history.Count-2,i=0;
for (; i < potentialNew.Count - 1; i++)
{
if (potentialNew[i] == lastItem && potentialNew[i - 1] == history[lastIndexToCheck])
{
break;
}
}
history.AddRange(potentialNew.Skip(i+1).ToList());
现在历史将包含所需的元素集.
标签:c,net,linq,overlapping,list 来源: https://codeday.me/bug/20190611/1220217.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。