create table table_name(id int, name text, description text); insert into table_name values (1, 'John', 'big one'); select (id, name, description), id, name, description from table_name; row | id | name | description --------------------+----+------+------------- (1,John,"big one") | 1 | John | big one (1 row)
Разница важна. Столбцы, заключенные в скобки, образуют конструктор строки , также известный как составное значение, возвращаемое в одном столбце. Обычно отдельные столбцы являются предпочтительными в качестве результата запроса. Конструкторы строк необходимы, когда нужна строка в целом (например, в
VALUES
вышеупомянутой командыINSERT
). Они также используются в качестве значений составных типов.
В первую очередь, используйте a Hashset<string>
вместо списка, Содержит метод, пойдет быстрее:
int count = hits.Length();
Hashset<string> idStrings = new Hashset<string>();
Править: Вы не должны звонить, "Содержит", если Вы используете Hashset, поскольку он не может содержать дублирующиеся объекты. Просто использование Добавляет, оно автоматически удалит дублирующиеся значения.
Оператор, который замедляет Ваш код, idStrings.Contains(idString)
.
Можно попытаться использовать более быструю структуру данных, чем List
(дерево или хеш-таблица, возможно?).
А именно, Вам нужна структура данных с подлинейным временем поиска. Хеш-таблицы имеют постоянное время поиска, в то время как деревья обычно имеют логарифмическое время поиска.
Используйте a Dictionary
вместо a List
. Dictionary.ContainsKey
метод намного быстрее, чем List.Contains
метод.
Dictionary<string, int> idStrings = new Dictionary<string, int>();
int count = hits.Length();
for (int i = 0; i < count; i++) {
string idString = hits.Doc(i).Get("id");
if (!idStrings.ContainsKey(idString)) {
idStrings.Add(idString, 1);
}
}
При использовании платформы 3.5, можно использовать a HashSet
вместо a Dictionary
:
HashSet<string> idStrings = new HashSet<string>();
int count = hits.Length();
for (int i = 0; i < count; i++) {
string idString = hits.Doc(i).Get("id");
idStrings.Add(idString);
}