- Home /
Getting index of the smallest number in a list
I have tried this: distanceList.IndexOf(distanceList.Min())
But I got an error:
InvalidOperationException: Operation is not valid due to the current state of the object System.Linq.Enumerable.Iterate[Single,Single] (IEnumerable`1 source, Single initValue, System.Func`3 selector) System.Linq.Enumerable.Min (IEnumerable`1 source)
Answer by Bunny83 · Nov 06, 2014 at 04:16 PM
Try:
float minVal = distanceList.Min();
int index = distanceList.IndexOf(minVal);
edit
I found the problem. I had a look at the implementation of the "Min" extension method. That method will throw the exception you got when the enumeration is empty. Min is required to return any value but if there's no value at all it can't return anything.
This is of course documented. It's quite logical in the end but i didn't though of that case since you just posted that single line of code.
So to fix your probem: Check if the list contains any elements and if not, don't execute the Min extension method.
InvalidOperationException: Operation is not valid due to the current state of the object System.Linq.Enumerable.Iterate[Single,Single] (IEnumerable`1 source, Single initValue, System.Func`3 selector) System.Linq.Enumerable.$$anonymous$$in (IEnumerable`1 source)
I changed $$anonymous$$Val to float.
That shouldn't happen. What exactly is "distanceList"? is it a generic List< float >
? Where do you execute this? Are you doing any fancy stuff with threads? Do you execute this within a foreach loop over the same distanceList? Without more information we can't say much about that.
This bare-bone example works fine:
List<float> list = new List<float>();
list.Add(50);
list.Add(30);
list.Add(70);
int index = list.IndexOf(list.$$anonymous$$in());
Debug.Log("index : " + index);
foreach (GameObject possibleCube in possibleCubesList){
distanceList.Add(Vector3.Distance(possibleCube.transform.position, transform.position));
}
float $$anonymous$$Val = distanceList.$$anonymous$$in();
$$anonymous$$Index = distanceList.IndexOf($$anonymous$$Val);
$$anonymous$$Index is a float.
Your answer
Follow this Question
Related Questions
SetActive() Object reference not set to an instance of an object. 1 Answer
Array index out of range error 1 Answer
Semicolons are seen as an unexpected symbol 1 Answer
Object reference not set to an instance of an object in functions 1 Answer
How may I get the children (direct and dependents) of a game object? 2 Answers