2015-01-26 2 views
3

Итак, у меня есть список объектов из класса. В этом списке я хочу, чтобы получить объект, где Table.name == "value"C# получить объект из списка, где object.value равно

Class Table{ 

    public string name; 
    private string primarykey; 
    private string[] columnNames; 

    //some methods and functions 
} 

Моего вопроса есть эффективный способ, чтобы получить указанный объект из этого списка с помощью LINQ, например, или я просто петля через это с основной поисковой Алгоритм.

С основным поиском алгоритмом: я имею в виду:

foreach(Table t in tables) 
{ 
    if(t.name == "value") 
     return t; 
} 

Так есть более эффективный способ сделать это с помощью LINQ, например?

+4

linq не делает ваш код магически быстрее. Поэтому, хотя вы можете использовать таблицы. Сингл (t => t.name == "value"), он не будет быстрее. – sloth

+0

Я знаю, что это не делает его быстрее, но это делает его более читаемым с помощью linq – kpp

+0

Если вы заинтересованы в удобочитаемости больше, чем эффективности, пожалуйста, убедитесь, что в следующий раз, когда вы укажете, что в вашем вопросе вы говорите об «эффективном», дважды в вопросе, но никогда не упоминайте, что на самом деле вам просто нужен более простой код. –

ответ

10

Вы можете легко сделать это с помощью LINQ, но это не будет более эффективным:

var match = tables.FirstOrDefault(t => t.name == value); 

Теперь match будет null если нет нет таблицы соответствия этого критерия. Вам нужно решить, что вы хотите в этом случае.

Код LINQ короче, но все равно придется перебирать каждую таблицу в списке, пока не найдет совпадение.

Возможно, вы захотите рассмотреть Dictionary<string, Table> для сопоставления имен таблицам, но, очевидно, это требует наличия только одной таблицы для каждого имени. Кроме того, если у вас действительно много таблиц, вы вполне можете найти, что это не так быстро. Это O (1) (предполагая отсутствие хеш-коллизий) вместо O (n), но когда n мало, O (n) действительно довольно быстро. Я настоятельно рекомендую вам проверить, действительно ли это узкое место, прежде чем беспокоиться об эффективности этого.

+0

Я считаю, что стоит упомянуть, что LINQ не ускорит его код –

+3

@HossamBarakat: Как и я, дважды. –

+2

спросил 4 минуты назад, ответил 3 мин назад. Скит снова наносит удар. –

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