gpt4 book ai didi

c# - 从列表中删除项目并同时获取项目

转载 作者:可可西里 更新时间:2023-11-01 08:37:45 24 4
gpt4 key购买 nike

在 C# 中,我试图从随机索引的列表中获取一个项目。检索到它后,我希望将其删除,以便不再选择它。好像我需要很多操作才能做到这一点,难道没有一个功能可以让我简单地从列表中提取一个项目吗? RemoveAt(index) 函数无效。我想要一个有返回值的。

我在做什么:

List<int> numLst = new List<int>();
numLst.Add(1);
numLst.Add(2);

do
{
int index = rand.Next(numLst.Count);
int extracted = numLst[index];
// do something with extracted value...
numLst.removeAt(index);
}
while(numLst.Count > 0);

我想做什么:

List<int> numLst = new List<int>();
numLst.Add(1);
numLst.Add(2);

do
{
int extracted = numLst.removeAndGetItem(rand.Next(numLst.Count));
// do something with this value...
}
while(numLst.Count > 0);

是否存在这样的“removeAndGetItem”函数?

最佳答案

不,因为它违反了纯函数礼仪,其中方法要么有副作用,要么返回有用的值(即不只是指示错误状态)——永远不会两者兼而有之。

如果您希望该函数看起来是原子的,您可以在列表上获取一个锁,这将阻止其他线程在您修改它时访问该列表,前提是它们也使用了:

public static class Extensions
{
public static T RemoveAndGet<T>(this IList<T> list, int index)
{
lock(list)
{
T value = list[index];
list.RemoveAt(index);
return value;
}
}
}

关于c# - 从列表中删除项目并同时获取项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15154110/

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