2016-04-08 7 views
-1

Я хочу получить элемент или его список из моего списка, не используя цикл foreach, потому что мой список очень большой, также мне нужно сделать еще один цикл для результата, чтобы точка алгоритмическая сложность обзора не рекомендуется использовать две петли внутри друг друга.Извлечение элемента из списка без цикла

+0

как вы определяете элемент? Индекс, условие? – fubo

+0

HashTable может вам помочь. – zypro

+1

У меня есть список объектов, иногда мне нужно условие для свойства и для получения одного элемента я использую id. –

ответ

-3

Если вы можете получить один элемент из списка без циклов, вы можете использовать функции LINQ (first, firstOrdefault, Single, SingleOrdefault), которые могут дать вам один элемент из вашего списка, также если вам нужно более одного раза, вы можете использовать где с ToList в конце для cast.all эти функции принимают в качестве параметров lambda выражение. Также проверьте эти ссылки, чтобы понять, почему я прав:

До тех пор, пока у вас есть большая коллекция размер, LINQ является правильным выбором.

+5

Linq использует петли (внутренние) – fubo

+3

Да, но это занимает меньше времени, чем обычный цикл. попробуйте и вычислите время выполнения, чтобы увидеть результат. –

+0

LINQ - это действительно путь. Более читаемый и поддерживаемый код; но немного медленнее (в 99% случаев не имеет значения). –

3

Ответ зависит от среднего, чтобы определить, какой элемент вы хотите. Дело в том, что List будет иметь сложность O (1), если у вас есть индекс элемента, который вы хотите найти; в противном случае он всегда будет иметь сложность O (n) (LINQ или нет).

Однако, если вам нужно извлечь много элементов в вашей коллекции, а затем использовать цикл на них, LINQ позволит вам сделать это только один петлю (на всех элементах коллекции) легко:

foreach (var element in myCollection.Where(myCondition)) 

Если вы хотите найти свой элемент с меньшей сложностью, чем O (n), вы должны посмотреть HashSet<T> и Dictionary<TKey, TValue>.

Но ваш вопрос недостаточно точен, чтобы дать вам более конкретный ответ.

Смежные вопросы