C# + Unity - 从类列表中的变量中获取最小值[重复]

     2023-04-12     277

关键词:

【中文标题】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);

会比首先实际计算距离更有效,因为它会跳过对所有向量 sqrMagnitudes 使用平方根。因为a &gt; b 也暗示了a² &gt; b²,并且我们知道幅度总是正的,所以知道所有增量向量的sqrMagnitudes 就足以对它们进行排序。

这样做的好处是你还可以获得第二和第三近的敌人等。

【讨论】:

尽管如此,在 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&lt;String&gt;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&lt;AClass&gt;对象(我们将其命名为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... 查看详情