C# 从两个列表中产生一个列表
我有两个列表,它们都是有意义的。表a和表b。此时,我将excel电子表格中列表a的值写入a列,将列表b的值写入b列。清单b应具有与清单a相同的数据,并按顺序排列。情况并非总是如此。 当我在excel中写入列表b的值时,如果值在列表a的同一点上,我想将其写入单元格,如果不是,我想将空字符串写入单元格 我有两个列表C# 从两个列表中产生一个列表,c#,excel,list,C#,Excel,List,我有两个列表,它们都是有意义的。表a和表b。此时,我将excel电子表格中列表a的值写入a列,将列表b的值写入b列。清单b应具有与清单a相同的数据,并按顺序排列。情况并非总是如此。 当我在excel中写入列表b的值时,如果值在列表a的同一点上,我想将其写入单元格,如果不是,我想将空字符串写入单元格 我有两个列表a={a”,“b”,“c”,“d”,“e”,“c”,“f”},和b={a”,“d”,“e”,“c”}。我需要生成第三个列表c,比如从两个c={“a”,“e”,“c”,“e”} 尝试: va
a={a”,“b”,“c”,“d”,“e”,“c”,“f”}
,和b={a”,“d”,“e”,“c”}
。我需要生成第三个列表c,比如从两个c={“a”,“e”,“c”,“e”}
尝试:
var c = a.Zip(b, (x, y) => x.Equals(y, StringComparison.CurrentCultureIgnoreCase) ? x : "");
但这只会给我c={“a”}
如果索引重要:
var c = a.Select((s, i) => b.ElementAtOrDefault(i) == s ? s : "").ToList();
否则:
var c = a.Select(s => b.Contains(s) ? s : "").ToList();
如果案件无关紧要:
var c = a.Select(s => b.Contains(s, StringComparer.CurrentCultureIgnoreCase) ? s : "")
.ToList();
如果索引很重要:
var c = a.Select((s, i) => b.ElementAtOrDefault(i) == s ? s : "").ToList();
否则:
var c = a.Select(s => b.Contains(s) ? s : "").ToList();
如果案件无关紧要:
var c = a.Select(s => b.Contains(s, StringComparer.CurrentCultureIgnoreCase) ? s : "")
.ToList();
您可以使用以下方法:
IEnumerable<T> FillBlanks<T>(IEnumerable<T> source, IEnumerable<T> collection, T blank)
{
// TODO error checking
using(var e = collection.GetEnumerator())
{
bool more = e.MoveNext();
foreach(var x in source)
if(more && x.Equals(e.Current))
{
yield return x;
more = e.MoveNext();
}
else
yield return blank;
}
}
c
现在是:
您可以使用以下方法:
IEnumerable<T> FillBlanks<T>(IEnumerable<T> source, IEnumerable<T> collection, T blank)
{
// TODO error checking
using(var e = collection.GetEnumerator())
{
bool more = e.MoveNext();
foreach(var x in source)
if(more && x.Equals(e.Current))
{
yield return x;
more = e.MoveNext();
}
else
yield return blank;
}
}
c
现在是:
背后的逻辑是什么?您还需要格式化您的问题并向我们展示您的尝试:)这些是字符串列表。。右表?位置重要吗?@HosseinNarimaniRad逻辑大致是:逐步比较a和b。如果a中有一个元素在b中“缺失”,请“填写”一个空白字符串。背后的逻辑是什么?您还需要格式化您的问题并向我们展示您的尝试:)这些是字符串列表。。右表?位置重要吗?@HosseinNarimaniRad逻辑大致是:逐步比较a和b。如果a中有一个元素在b中“缺失”,请“填入”一个空白字符串。我认为它不会返回正确的结果。如此优雅的sol真是太好了。好的tim@MarcinJuraszek:现在已测试,是的,它不会产生所需的结果(仅
a
)。然而,我必须承认,我还不理解逻辑。逻辑大致是:逐步比较a
和b
。如果a
中有一个元素在b
中“缺失”,则“填充”一个空白字符串。这里b是a的子集,如果b有更多的元素而a有更少的元素,这将不起作用,那么我认为它不会返回正确的结果。如此优雅的sol值得称赞。好的tim@MarcinJuraszek:现在已测试,是的,它不会产生所需的结果(仅a
)。然而,我必须承认,我还不理解逻辑。逻辑大致是:逐步比较a
和b
。如果a
中有一个元素在b
中“缺失”,则“填充”一个空白字符串。这里b是a的子集,如果b有更多的元素而a有更少的元素,这将不起作用then@svick对。去掉了无用的石膏。最好创建一个重载,该重载接受并使用IEqualityComparer
@svick True。去掉了无用的石膏。最好创建一个重载,该重载接受并使用IEqualityComparer
。