- Home /
Finding the index of the min value in the list
Hi, I need to find the closest pathway-node to the game object. for that I create a list of distances to all nodes and finding the min distance. However I don't know how to get the index of that node.
private void CurrentNode()
{
List<float> distances = new List<float>();
for (int i = 0; i< nodes.Count; i++)
{
float distanceToNode = Vector3.Distance(this.transform.position, nodes[i].position);
distances.Add(distanceToNode);
var minDistance = Mathf.Min(distances.ToArray());
}
}
After this stage I need to find the index of the node with min distance but I have no idea how to do it. I'll be thankful for any ideas!
Answer by Hellium · Jul 02, 2020 at 10:59 AM
private void CurrentNode()
{
int minIndex = 0;
int minDistance = Mathf.Infinity;
for (int i = 0; i< nodes.Count; i++)
{
float distanceToNode = (transform.position - nodes[i].position).sqrMagnitude;
if(distanceToNode < minDistance)
{
minDistance = distanceToNode ;
minIndex = i ;
}
}
Debug.Log("Closest node: " + i + " - distance = " + minDistance);
}
To be consistant with most C# APIs you probably want to set the index to "-1" as initial value to indicate "non found". Returning 0 or -1 does not make any difference when blindly using it as index into the array / List since this could only happen when "nodes" is empty so -1 and 0 are equally invalid. Though "-1" generally has the notion of "not found"
Another micro optimisation would be to cache transform.position since it requires one GetComponent<Transform>()
call as well as reading the position property every iteration. Though this is just a $$anonymous$$or thing.
Your answer
Follow this Question
Related Questions
Set Specific List Value 3 Answers
A node in a childnode? 1 Answer
How do I return the index of an array of sprites as an int? 1 Answer
Fade GUI Textures when value changes C# 0 Answers
Indexing lists based on positions 2 Answers