关键词:
【中文标题】C# + Unity - 从类列表中的变量中获取最小值[重复]【英文标题】:C# + Unity - Getting the MIN value from a variables inside a List of Classes [duplicate] 【发布时间】:2021-02-06 00:33:44 【问题描述】:我有这个类的列表:
public class EachEnemy
public GameObject enemy;
public Vector3 coords;
public float distance;
他们会计算到船的“距离”。 随着敌人的生成和移动,距离变量一直在变化。
我需要在该类的列表中找到最小的距离,以及它的索引,以便我可以瞄准 Enemy 对象。
【问题讨论】:
morelinq.github.io/1.x/ref/api/html/… 【参考方案1】:你可以用Linq OrderBy
点赞
using System.Linq;
...
// Wherever you get this from
List<EachEnemy> allEnemies;
// Sorted by the distance to this object
var sortedEnemies = allEnemies.OrderBy(enemy => (transform.position - enemy.coords).sqrMagnitude);
// Or depending on how your class is used simply
//var sortedEnemies = allEnemies.OrderBy(enemy => enemy.distance);
// This would return null if the list was empty
// Or the first element of the sorted lost -> smallest distance
var nearestEnemy = sortedEnemies.FirstOrDefault();
注意使用
OrderBy(enemy => (transform.position - enemy.coords).sqrMagnitude);
会比首先实际计算距离更有效,因为它会跳过对所有向量 sqrMagnitude
s 使用平方根。因为a > b
也暗示了a² > b²
,并且我们知道幅度总是正的,所以知道所有增量向量的sqrMagnitude
s 就足以对它们进行排序。
这样做的好处是你还可以获得第二和第三近的敌人等。
【讨论】:
尽管如此,在 O(n) 可行的情况下实现 O(n log n) 是没有意义的。数据不需要排序; OP 只想要具有最小值的项目,可以在线性时间内找到。【参考方案2】:float smallestDistance = eachEnemyList[0].distance;
int index = 0;
for(int i = 1; i < eachEnemyList.Count; i++)
if(eachEnemyList[i].distance < smallestDistance)
smallestDistance = eachEnemyList[i].distance;
index = i;
这可能没有完美优化,但应该没问题。这为您提供了最小距离和包含最小距离的 EachEnemy 类的索引。
【讨论】:
【参考方案3】:您可以遍历列表中的每个项目并在循环外保存值,也可以将索引保存在循环外,例如
EachEnemy someFuncname(List<EachEnemy> list)
int index = 0;
EachEnemy ea = null;
float distance = 9999 ///
foreach (var Enemy in list)
if (Enemy.Distance < distance)
ea = Enemy;
return ea;
同样的方法也可以返回索引。
【讨论】:
Unity:列表变量数组。如何在 C# 中正确声明它
】Unity:列表变量数组。如何在C#中正确声明它【英文标题】:Unity:ArrayofListsvariable.HowtodeclareitcorrectlyinC#【发布时间】:2021-12-2006:26:14【问题描述】:我需要在Unity中声明一个列表数组变量。数组大小是固定的,它是5。我的代码... 查看详情
C# 查找列表中的哪个几何值最接近静态几何点
】C#查找列表中的哪个几何值最接近静态几何点【英文标题】:C#FindingwhichgeometryvaluefromaListisclosesttoastaticgeometrypoint【发布时间】:2017-03-2711:39:07【问题描述】:我创建了自己的“地理定位”类,它只包含两个变量“经度”和“纬... 查看详情
确定变量是不是等于值“列表”中的值的最简洁方法
】确定变量是不是等于值“列表”中的值的最简洁方法【英文标题】:Mostsuccinctwaytodetermineifavariableequalsavaluefroma\'list\'ofvalues确定变量是否等于值“列表”中的值的最简洁方法【发布时间】:2010-09-0607:31:24【问题描述】:如果我... 查看详情
如何从类变量数组中访问类成员?
】如何从类变量数组中访问类成员?【英文标题】:Howtoaccessclassmembersfromanarrayofclassvariables?【发布时间】:2010-02-1721:22:34【问题描述】:我想使用PHP的反射功能从方法中检索参数名称列表。我有这样的课:classTestClasspublicfunctionme... 查看详情
在unity5中,用c#脚本如何获取ugui中inputfield中的文本?
1、打开Unity,新建一个空工程。2、在百度上搜索下载XLua,导入Unity工程中。3、新建一个Lua脚本,内容大概为打印一个消息,设置几个变量,然后保存为“CSCallLua.lua.txt”。4、在工程中,新建一个脚本,可以命名为“MyCSCallLua”... 查看详情
从类路径目录中获取资源列表
】从类路径目录中获取资源列表【英文标题】:Getalistofresourcesfromclasspathdirectory【发布时间】:2011-04-2419:12:46【问题描述】:我正在寻找一种从给定类路径目录中获取所有资源名称列表的方法,例如方法List<String>getResou... 查看详情
jQuery - 从类的元素中获取属性值的列表
】jQuery-从类的元素中获取属性值的列表【英文标题】:jQuery-getalistofvaluesofanattributefromelementsofaclass【发布时间】:2011-02-1418:58:35【问题描述】:我有一个类.object,它有一个名为level的属性。我想在页面上获取level的所有不同值的... 查看详情
在字典的列表中添加变量(Dictionary<Key,List<var>)unity C#
】在字典的列表中添加变量(Dictionary<Key,List<var>)unityC#【英文标题】:addingavariableinalistonadictionary(Dictionary<Key,List<var>)unityC#【发布时间】:2021-02-1406:35:17【问题描述】:这就是我想要的个人电脑组件的集合然后分... 查看详情
您可以从类中获取实例变量名称吗? [复制]
】您可以从类中获取实例变量名称吗?[复制]【英文标题】:Canyougettheinstancevariablenamefromaclass?[duplicate]【发布时间】:2015-08-2305:00:57【问题描述】:我知道你不应该在程序中使用变量名,但我使用的只是为了调试目的,并希望将... 查看详情
从 C# 中的证书存储中获取证书列表
】从C#中的证书存储中获取证书列表【英文标题】:GetlistofcertificatesfromthecertificatestoreinC#【发布时间】:2010-11-1508:56:52【问题描述】:对于安全应用程序,我需要在对话框中选择一个证书。如何使用C#访问证书存储或其一部分(... 查看详情
在C#中获取命名空间中的类列表[重复]
】在C#中获取命名空间中的类列表[重复]【英文标题】:GetlistofclassesinnamespaceinC#[duplicate]【发布时间】:2010-12-2213:58:19【问题描述】:我需要以编程方式获取给定命名空间中所有类的List。如何在C#中实现这一点(反射?)?【问... 查看详情
如何将字符串列表转换为c#中的浮点列表,统一?
】如何将字符串列表转换为c#中的浮点列表,统一?【英文标题】:Howtoconvertalistofstringintoalistoffloatsinc#,unity?【发布时间】:2021-10-1603:53:21【问题描述】:所以我从MySQL数据库中查询数据,并将数据存储在JSON文件中。我有一个名... 查看详情
如何使用 C# 获取 Access 数据库中的列列表?
】如何使用C#获取Access数据库中的列列表?【英文标题】:HowdoIgetalistofcolumnsinanAccessdatabaseusingC#?【发布时间】:2014-08-1516:53:12【问题描述】:在运行时,如何在Access中获取表中的列列表?我不想要表中的数据,只想要列名和类型... 查看详情
从 C# 中的对象列表中获取 JSON 文件
】从C#中的对象列表中获取JSON文件【英文标题】:gettingaJSONfilefromalistofObjectsinC#【发布时间】:2019-03-1322:52:03【问题描述】:我是C#新手,所以请多多包涵:)我有一个这样的人名单:List<Person>PersonsList=newList<Person>();每个人... 查看详情
在c#中使用lambda获取嵌套列表中的特定元素
】在c#中使用lambda获取嵌套列表中的特定元素【英文标题】:Getthespecificelementinnestedlistusinglambdainc#【发布时间】:2015-03-2100:13:52【问题描述】:好日子,假设我有一个静态List<AClass>对象(我们将其命名为myStaticList),... 查看详情
从 C# 中的 XML 字符串中获取元素列表
】从C#中的XML字符串中获取元素列表【英文标题】:GettingalistofelementsoutofanXMLstringinC#【发布时间】:2021-12-0723:09:15【问题描述】:我有一个名为doc的字符串XML,如下所示:<equitylocation="NewYork",index=0><bucketdate="20211009">...<... 查看详情
如何在 c# 中的浮点列表中添加浮点列表,统一?
】如何在c#中的浮点列表中添加浮点列表,统一?【英文标题】:howtoaddlistoffloatswithinalistoffloatsinc#,unity?【发布时间】:2021-10-1617:45:15【问题描述】:我有一个循环遍历数组并将数组转换为浮点列表的forloop。privateList<Single>xfl... 查看详情
如何使用 C# 获取访问 mdb 数据库中的表列表 [重复]
】如何使用C#获取访问mdb数据库中的表列表[重复]【英文标题】:howtoobtainlistoftablesinanaccessmdbdatabasewithC#[duplicate]【发布时间】:2011-05-1122:50:11【问题描述】:可能的重复:RetrieveListofTablesinMSAccessFileHowcanIgetalistoftablesinanAccess(Jet)data... 查看详情