Вы можете использовать FindIndex
метод списка, принимающий предикат в качестве аргумента
int index = ListOfTuples2.FindIndex(t => t.Item1 == 5000.25);
if (index > = 0) {
// found!
}
FindIndex
возвращает -1
, если такой элемент не найден.
Но вы можете рассмотреть возможность использования словаря.Если коллекция большая, она находит записи намного быстрее, чем список.Время поиска в Big O записи : List<T>
равно O(n)
, Dictionary<K,V>
равно O(1)
.Однако элементы в словаре не упорядочены и не имеют индекса.Кроме того, ключи должны быть уникальными.Если вам нужны заказанные товары, придерживайтесь списка.
var dict = new Dictionary<double, int>{
[doubleTuple] = intTuple,
[5000.00] = 2,
[5000.25] = 3,
[5000.50] = 4,
[5000.25] = 5
}
if (dict.TryGetValue(5000.25, out int result)) {
// result is 3; and contains the value, not the index.
}
Вы также можете добавить записи с помощью
dict.Add(5000.75, 8);
Если вы уверены, что словарь содержит запись, вы можете просто получитьэто с
int result = dict[5000.25];
Кроме того, если вы имеете дело с ценами, рассмотрите возможность использования типа decimal
.Если был создан специально для финансовых и денежных расчетов.Тип double
хранит значения в виде двоичных чисел.0.1
(десятичный) равен 0.000110011001100110011001100110011...
(двоичный), т. Е. double
вводит ошибку округления исключительно путем преобразования десятичной константы в ее двоичное представление, тогда как decimal
сохраняет каждый десятичный знак константы как есть.double
хорошо (и быстрее) для научных расчетов.Не имеет значения, является ли температура 29,7 или 29,69999999999 градусов, поскольку вы можете в любом случае измерять ее с очень ограниченной точностью (возможно, 1%).