powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Поиск по значению поля в списке
11 сообщений из 11, страница 1 из 1
Поиск по значению поля в списке
    #37177742
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дано: объект такой вот структуры:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Class ResponseData Extends %RegisteredObject
{
Property params As list Of ParamsItem;
}

Class ParamsItem Extends %RegisteredObject
{
Property name As %String;
Property value As %Integer;
}
Как в объекте ResponseData найти ParamsItem с определенным значением name?
Что-то вроде этого:
Код: plaintext
1.
w responseData.params.Find("My param","name").value
...
Рейтинг: 0 / 0
Поиск по значению поля в списке
    #37178228
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coder1cv8 , ты хочешь в некоем классе поискать есть в нём некое свойство или нет? Потому как обратиться к свойству можно сразу...
...
Рейтинг: 0 / 0
Поиск по значению поля в списке
    #37187094
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Нет. Попробую привести xml-проекцию объекта, может так понятно будет:
<ResponseData>
<Params>
<ParamsItem>
<name>speed</name>
<value>120</value>
</ParamsItem>
<ParamsItem>
<name>height</name>
<value>1200</value>
</ParamsItem>
</Params>
</ResponseData>

Так вот мне надо получить из объекта значения параметра "speed", либо сказать что он не найден. Кроме перебора всех элементов Params и проверки name = "speed", есть варианты?
...
Рейтинг: 0 / 0
Поиск по значению поля в списке
    #37187096
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ура, наконец-то заработала отправка сообщений на форуме )
...
Рейтинг: 0 / 0
Поиск по значению поля в списке
    #37187971
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coder1cv8,

напиши, плиз, что выведет
w responseData.params.ClassName(1)
...
Рейтинг: 0 / 0
Поиск по значению поля в списке
    #37188347
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

это ж синтетический пример )
...
Рейтинг: 0 / 0
Поиск по значению поля в списке
    #37188353
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coder1cv8Так вот мне надо получить из объекта значения параметра "speed", либо сказать что он не найден. Кроме перебора всех элементов Params и проверки name = "speed", есть варианты?При поставленных Вами условиях - нет. Посмотрите документацию по классам %ListOfObjects или %Collection.ListOfObj .

Но другие варианты, конечно же есть, например:

Class ResponseData Extends %RegisteredObject
{
  Property params As list Of ParamsItem;

  Property paramsNew [ MultiDimensional ];

  Property paramsArr As array Of %Integer;
}

Class ParamsItem Extends %RegisteredObject
{
  Property name As %String;
  Property value As %Integer;
}

  set obj=##class(User.ResponseData).%New()
  
  #; заполнение
  set p1=##class(User.ParamsItem).%New()
  set p1.name="name1"
  set p1.value=10
  d obj.params.Insert(p1)
  set p2=##class(User.ParamsItem).%New()
  set p2.name="test2"
  set p2.value=2
  d obj.params.Insert(p2)
  set p3=##class(User.ParamsItem).%New()
  set p3.name="test3"
  set p3.value=7
  d obj.params.Insert(p3)

  set obj.paramsNew("name1")=10
  set obj.paramsNew("name2")=2
  set obj.paramsNew("name3")=7
  
  do obj.paramsArr.SetAt("name1",10)
  do obj.paramsArr.SetAt("name2",2)
  do obj.paramsArr.SetAt("name3",7)
  
  #; поиск
  w obj.paramsNew("name3"),!
  w obj.paramsArr.Find("name3"),!

Блок А.Н.coder1cv8,

напиши, плиз, что выведет
w responseData.params.ClassName(1)Наверное, имелось в виду: w responseData.params.%ClassName(1)
...
Рейтинг: 0 / 0
Поиск по значению поля в списке
    #37188584
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

Да, я это и имел ввиду :-)
Просто я на память не помню, что это за класс, а зная класс можно посмотреть, какие методы у него есть.
...
Рейтинг: 0 / 0
Поиск по значению поля в списке
    #37188951
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У кого есть версия 2011.1 могут найти в документации ([Documentation]>[Development Guides]) новый раздел - Programming Orientation Guide , где собраны советы как лучше писать серверный код и что необходимо учитывать при проектировании системы.

PS: итоги круглого стола ИТ в здравоохранении 2011: куда движется отрасль
...
Рейтинг: 0 / 0
Поиск по значению поля в списке
    #37190216
coder1cv8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit ,
Спасибо! Ответ ясен.

В том то и загвоздка что мне не по массиву поиск нужен. С массивами все ясно как раз.
Если немного расширить и углубить это вопрос, мне нужен аналог объекта 1С "табличная часть" (если вдруг вы знакомы с 1С). Где был бы поиск по нескольким "колонкам", то есть найти строку в list-е, где "name1"=10 и "name2"=12 и "name3"=7, к примеру.

Кстати, может быть есть возможность сделать запрос не к %Persistent классу? )
...
Рейтинг: 0 / 0
Поиск по значению поля в списке
    #37190846
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coder1cv8 ,

Если имелся в виду аналог LINQ to Objects в .NET, то в Caché такого нет.
Но Вы можете расширить стандартный класс коллекции своим, с нужными Вам методами и запросами, используя рефлексию .
Кстати, может быть есть возможность сделать запрос не к %Persistent классу? )Что мешает для хранимых классов данные хранить в приватных глобалах или использовать приватные временные таблицы?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Поиск по значению поля в списке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]