gpt4 book ai didi

linq - C# System.Linq.Lookup 类删除和添加值

转载 作者:行者123 更新时间:2023-12-04 00:53:28 25 4
gpt4 key购买 nike

我在 C# 中使用 Lookup 类作为我的主要数据容器,供用户从两个选中的列表框中选择值。

Lookup 类比使用 Dictionary> 类要容易得多,但是我找不到删除和添加值到查找类的方法。

我想过使用 where 和 union,但我似乎做对了。

提前致谢。

最佳答案

不幸的是,Lookup 类的创建是 .NET 框架内部的。创建查找的方式是通过 Lookup 类上的静态工厂方法。这些是:

internal static Lookup<TKey, TElement> Create<TSource>(IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer);
internal static Lookup<TKey, TElement> CreateForJoin(IEnumerable<TElement> source, Func<TElement, TKey> keySelector, IEqualityComparer<TKey> comparer);

但是,这些方法是内部的,不供我们使用。查找类没有任何删除项目的方法。

您可以添加和删除的一种方法是不断创建新的 ILookup。例如 - 如何删除一个元素。
public class MyClass
{
public string Key { get; set; }
public string Value { get; set; }
}

//We have a fully populated set:
var set = new List<MyClass>() //Populate this.
var lookup = set.ToLookup(m => m.Key, m => m);

//Remove the item where the key == "KEY";
//Now you can do something like that, modify to your taste.
lookup = lookup
.Where(l => !String.Equals(l.Key, "KEY"))
//This just flattens the set - up to you how you want to accomplish this
.SelectMany(l => l)
.ToLookup(l => l.Key, l => l.Value);

要添加到列表中,我们可以执行以下操作:
//We have a fully populated set:
var set = new List<MyClass>() //Populate this.
var lookup = set.ToLookup(m => m.Key, m => m);

var item = new MyClass { Key = "KEY1", Value = "VALUE2" };

//Now let's "add" to the collection creating a new lookup
lookup = lookup
.SelectMany(l => l)
.Concat(new[] { item })
.ToLookup(l => l.Key, l => l.Value);

关于linq - C# System.Linq.Lookup 类删除和添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4030953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com