unity将泛型类型作为传参
把不同的泛型复合类型变量列表(list)传到同一个函数中。
该泛型容器类型是一个链表GFLink。
这些GFLink复合容器类型的声明符都是来自同一个基类BaseType的派生类。
现想要通过蓄水池算法来获取这些GFLink中所有派生类TypeA:BaseType、TypeB:BaseType的随机集合。
如现有这些声明符为AnimalBase的派生类
Dog:AnimalBase
Cat:AnimalBase
而实例是
GFLink<Dog> gfLinkA
GFLink<Cat> gfLinkB
我想从GFLink中提取随机的AnimalBase对象放到另一个List<AnimalBase>里面,并且想让声明符为Dog的gfLinkA和声明符为Cat的gfLinkB都可以调用这个方法
那么可以写成
public void ReservoirSampling<T>(List<AnimalBase> listTargets, GFLink<T> gfLink) { int n= 0; foreach(var target in gfLink) { var unit = target as AnimalBase; n++; if(listTargets.Capacity > listTargets.Count) { listTargets.Add(unit); } else { var random = Random.Range(0, n+1); if(random < targets.Capacity) { targets[n%targets.Capacity] = unit; } } } }
然后这样调用即可
1 List<AnimalBase> listTargets = new List<AnimalBase>(20) ; 2 GFLink<Dog> gfLinkA; 3 GFLink<Cat> gfLinkB; 4 5 ReservoirSampling(listTargets , gfLinkA); 6 ReservoirSampling(listTargets , gfLinkB);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!