SRK*_*RKX 7 c# linq functional-programming
我试图用C#中的函数方法处理一些列表.
我的想法是,我有一个集合,Tuple<T,double>我想改变Item 2一些元素T.
这样做的功能方式,因为数据是不可变的,就是获取列表,过滤元素与要更改的元素不同的所有元素,并使用新值附加新元组.
我的问题是我不知道如何在最后添加元素.我想要做:
public List<Tuple<T,double>> Replace(List<Tuple<T,double>> collection, T term,double value)
{
return collection.Where(x=>!x.Item1.Equals(term)).Append(Tuple.Create(term,value));
}
Run Code Online (Sandbox Code Playgroud)
但是没有Append办法.还有别的吗?
我相信你正在寻找Concat运营商.
它将两个连接IEnumerable<T>在一起,因此您可以创建一个具有单个项目的连接.
public List<Tuple<T,double>> Replace(List<Tuple<T,double>> collection, T term,double value)
{
var newItem = new List<Tuple<T,double>>();
newItem.Add(new Tuple<T,double>(term,value));
return collection.Where(x=>!x.Item1.Equals(term)).Concat(newItem).ToList();
}
Run Code Online (Sandbox Code Playgroud)
.NET 4.7.1 似乎添加了Append LINQ 运算符,这正是您想要的。与Concat不同,它采用单个值。
顺便说一句,如果声明泛型方法,则应在其名称后包含类型参数:
public List<Tuple<T, double>> Replace<T>(List<Tuple<T, double>> collection, T term, double value)
{
return collection.Where(x => !x.Item1.Equals(term))
.Append(Tuple.Create(term, value))
.ToList();
}
Run Code Online (Sandbox Code Playgroud)