Имя: Пароль:
1C
 
.Net Core, обмен с 1C по TCP/IP между различными устройствами
,
0 Serginio1
 
28.09.16
12:10
Выложил статьи
http://catalog.mista.ru/public/551698/
https://habrahabr.ru/post/311128/
Примеры можно скачать здесь https://yadi.sk/d/jRSHEA19svgrn

Решил написать кроссплатформенное решение из своего опыта 8 летней давности для обмена данными по TCP/IP между ТСД на Win CE и 1С еще 7-ки. Конечно, с 1С можно обмениваться через Web и HTTP-сервисы, но есть задачи, где нужно взаимодействие с оператором для выбора данных, брать данные, подготовленные на клиенте, печать на мобильный принтер.

    Основные проблемы связаны с сетями с плохим соединением на складах. Поэтому, нужно было уменьшить трафик за счет сжатия данных. Так, при работе в терминальных сессиях были проблемы с проброской портов в медленных сетях — Тормозит печать чека на фискальный регистратор через RDP.

    Также были проблемы при считывании двумерного штрихкода. Медленная печать с терминального сервера. Для решения этих проблем на машине клиента устанавливалась локальная 1С, которая работала как клиент и сервер. Данные со сканеров отправлялись на терминальный сервер и там обрабатывались. Для печати на фискальный регистратор отправлялись данные с сервера по TCP/IP, и с локальной 1С печатался чек. При печати этикеток с сервера оправлялись данные, на основании которых на локальной 1С формировался документ и отправлялся на печать.

    Кроме того, под многое оборудование для Linux нет драйверов. Можно, используя виртуализацию, держать Linux и Windows на одной машине, на Windows считывать данные и обмениваться с Linux по TCP/IP.

    Сейчас много у кого есть ТСД под WinCe, WinMo (недавно предлагали работу по настройке обмена на них). Кроме того, можно использовать ТСД на других осях, используя UWP и Xamarin.

    Кроме того, можно обмениваться сообщениями между клиентами 1С, наподобие чата.

   В большом .Net я часто использую обмен по TCp/IP
http://catalog.mista.ru/public/238584/
http://catalog.mista.ru/public/525806/
286 Serginio1
 
30.09.16
16:15
(284) Так где ты возьмешь описание класса, если типизация динамическая. В 1С тоже есть автокомплит, но вот параметры и результат функции не типизирован
287 Loky9
 
30.09.16
16:16
(286) Там же где они берутся в динамиках и генериках.
288 Serginio1
 
30.09.16
16:19
(287) В динамиках как раз ничего не берется. Если конечно ты приведение типа не сделаешь.
В Дженериках там либо вывод типа по параметрам, либо нужно указывать тип.
289 Serginio1
 
30.09.16
16:20
(288) Но у ExpandoObject или DynamicObject типы не известны
290 trdm
 
30.09.16
16:27
https://www.opennet.ru/opennews/art.shtml?num=45247
Анализатор PVS-Studio помог выявить 10000 ошибок в различных открытых проектах.
....
Качество различных открытых проектов сильно отличается. Например, в недавних проверках проявил себя пакет NUnit, в котором удалось найти всего одну ошибку, порадовал высоким качеством кода и отладчик GDB.

С другой стороны, при проверке Mono были выявлены сотни ошибок и возникли проблемы со сборкой.
291 trdm
 
30.09.16
16:31
http://www.viva64.com/ru/b/0431/
Ищем ошибки в Mono: сотни их!

static bool AreEqual (VisualStyleElement value1,
                      VisualStyleElement value2)
{
  return
    value1.ClassName == value1.ClassName && // <=
    value1.Part == value2.Part &&
    value1.State == value2.State;
}

Приятного как коворится юзания :)))
292 trdm
 
30.09.16
16:32
button_pressed_highlight = use_system_colors ?
                             Color.FromArgb (150, 179, 225) :
                             Color.FromArgb (150, 179, 225);
293 trdm
 
30.09.16
16:37
Что-бы не говорили, какой дотнет в усмертть кросплатформеный...
Сотни ошибок - это глюкавое ведро...
294 Garykom
 
гуру
30.09.16
16:37
(291) Хорошая бага не всегда проявляющаяся кста ну забыли 1 на 2 исправить, бывает
295 Garykom
 
гуру
30.09.16
16:38
(293) Тя плафтормы 1С не удивляют?
296 Serginio1
 
30.09.16
16:50
(293) Ты сравнивай .Net Core. Mono уже считай умер. С NetStandart 2 все перейдут на .Net Core.
297 Garykom
 
гуру
30.09.16
16:54
(296) "Все" это кто? Полтора разраба корпоративных поделок? Которые не на java задумали писать?
298 trdm
 
30.09.16
17:03
(296) не, даром не надо.
299 Serginio1
 
30.09.16
17:34
(297) На самом деле их много. Как и на Asp.Net Core
300 Serginio1
 
30.09.16
17:43
Можно посмотреть по активности на http://stackoverflow.com/questions/tagged/asp.net-core-mvc
301 Garykom
 
гуру
30.09.16
17:44
(299) Пробовал писать сайт/сервисы на asp.net и да поначалу вау как круто!

Но потом начинаются грабли, то тут глючит не пойми почему то там, то нагрузку в 100 каких то юзеров не держит (хотя php или jsp легко) или просто взяло и повисло нафик что пришлось сервер ребутать.
302 Garykom
 
гуру
30.09.16
17:47
(300) Если посмотреть "активность" тупых вопросов по 1С то легко можно подумать что все остальное во всем мире просто в загоне ))

Суть что на java или php достаточно просто погуглить, то на asp.net приходится спрашивать и не факт что ответ будет.
303 Serginio1
 
30.09.16
17:49
(301) Ну это зависит от того как код напишешь. Сейчас в .Net Core практически выкинули все синхронные методы.
Многие еще потоки используют.
(302) По Asp.Net на том же http://stackoverflow.com все легко находится.
304 Garykom
 
гуру
30.09.16
17:51
(303) Счас то может и находится, но когда пробовал писать тогда был ужас, причем самый ужас что никаких бесплатных либ не было, только платные за огромные бабки.
В результате плюнул и перешел на яву, там либ оказалось море и с мануалами.
305 Garykom
 
гуру
30.09.16
17:51
(304)+ Почему мне понравилась нода, что да технология новая но либ уже больше чем на C#
306 Masquerade
 
30.09.16
18:49
(304)

-- самый ужас что никаких бесплатных либ не было,
-- там либ оказалось море и с мануалами
-- что да технология новая но либ уже больше чем на C#

О каких либах речь то идет?
307 Garykom
 
гуру
30.09.16
18:58
(306) работа с офисными форматами xls, doc и прочие разные билиотеки для сетки, баз данных и прочего.

т.е. для всего что выходит за рамки лабораторно/учебного программирования, изначально C# это такая идеальная замена для языка обучения в школах/универах вместо устаревшего Паскаля и слишком сложных C++
308 Garykom
 
гуру
30.09.16
18:59
(307)+ Тем более что был (ну и есть но уже странно это) такой VB.Net как развитие VB6
309 Masquerade
 
30.09.16
19:00
(307)

изначально C# это такая идеальная замена для языка обучения в школах/универах

Я просто был не в курсе
310 Garykom
 
гуру
30.09.16
19:07
(309) Ну мне пришлось осваивать C# когда писал под WinMobile/WinCE ибо иначе никак (нативно это сдохнуть там было).

И тогда нифига не было, вот банальный FTP и нету (( что есть оно на PocketPC урезано по самое оказалось и полных либ не найти, пришлось на tcp/udp и http обмен переходить причем с 0 все изучая и ваяя.
311 Кирпич
 
30.09.16
19:07
(305) да побойся бога. На шарпах уже все на свете понаписали.
312 Gary417
 
30.09.16
19:08
(307) C# этож "убийца явы", какойже это язык для обучения
313 Garykom
 
гуру
30.09.16
19:10
(311) сам язык и .net фреймворк вышли на удивление удобными

на том же паскале-дельфи писать менее удобно оказалось
314 Serginio1
 
30.09.16
19:11
(307) Видно это давно было. Есть и Open XML.
Если не было на C? то был интероп. Особенно на WinMobile/WinCE.
Сейчас многое все поменялось.
315 Garykom
 
гуру
30.09.16
19:11
(312) ну рынок у явы он отжал это не поспоришь
316 Garykom
 
гуру
30.09.16
19:12
(314) 10 лет уже как
317 Serginio1
 
30.09.16
19:12
(313) Я сам с огромным сожалением оставл Delphi в прошлом.
318 Garykom
 
гуру
30.09.16
19:15
(317) угу чего мне сча реально не хватает так это C# + Lazarus, в смысле писать на C# и компиляция под любые платформы в нативный код ((
319 Garykom
 
гуру
30.09.16
19:16
(318)+ Без громоздких .Net Framework'ов чтобы запускалось нативно.
Java кстати тоже сча пипец уже с размерами...
320 Serginio1
 
30.09.16
19:16
(318) Сейчас есть .Net Native. Но, он только вначале пути.
321 Garykom
 
гуру
30.09.16
19:17
(320) не взлетит он, не смогут перелопатить весь .Net никак, а без этого смысла уже мало, мощщи классов/либ будет не хватать привычной.
322 Gary417
 
30.09.16
19:18
(321) ну всё зависит от желания МС выйти на линукс
323 Serginio1
 
30.09.16
19:21
324 Serginio1
 
30.09.16
19:21
(322) Так у них есть смысл в облаках. Они там кучу денег зарабатывают.
325 Gary417
 
30.09.16
19:25
(324) а причём тут облака и .Net?
326 Garykom
 
гуру
30.09.16
19:37
Кста кто еще удивился что MS для своей мобильно-телефонной платформы не додумались реализовать AndroidJava машину?

Или додумались но не смогли? Так бы куча софта/игрушек сразу были для Windows Phone и покупали бы на ура. А то ценник сча смешной (как и на планшеты с Windows 10) но не берутс.

Сам взял для отделов более дорогие (хуже технически/функционально) планшеты но зато с Android а не с Windows 10. Ибо повозился и плюнул, нафик мне траблы от отделов.
327 Gary417
 
30.09.16
19:38
(326) вообщето они хотели, но проект прикрыли
328 Gary417
 
30.09.16
19:39
Project Astoria называлось вродбы
329 Garykom
 
гуру
30.09.16
19:39
(327) Не-не то что читал то было полный эмулятор android'а включая натив софт а не только под Далвик
330 Serginio1
 
30.09.16
19:48
(326) А при том, что они туда перетягивают Linux и прочее и дают свои инструмены.
331 Masquerade
 
30.09.16
19:59
(266)

В лоб. Чтоб понятно было.

var string_array = new String[] {"hello",
                   "I prefer Jelly Belly beans.",
                   "When hell freezes over!" };




            var min_word = string_array.OrderBy(x => x.Length).FirstOrDefault();

            var all_indexes = Enumerable.Range(0, min_word.Length+1);

            var index_pairs = from index1 in all_indexes
                        from index2 in all_indexes
                        where index1 < index2
                        select new { start = index1, end = index2 };

            var all_variations = from index_pair in index_pairs
                                select new { result = min_word.Substring(index_pair.start, index_pair.end - index_pair.start) };

            var _max_substring = from variant in all_variations
                                 from word in string_array
                                 select new { variant_length = variant.result.Length, substring = variant.result, present = word.IndexOf(variant.result)>-1 ,word = word  };

            var max_substring = _max_substring.
                Where(x => x.present).
                GroupBy(x=>x.substring).
                Where(x=>x.Count()==string_array.Count()).
                OrderByDescending(x=>x.Key.Length).
                FirstOrDefault().
                Key;

            Console.Out.WriteLine(max_substring);
332 Masquerade
 
30.09.16
20:00
(331) +

Можно и в a la одну строчку, но тутошний народец этого не любит))))))
333 Serginio1
 
30.09.16
20:10
(326) Да вроде есть https://www.ikvm.net/
Но проблема не в софте. Там и сейчас софта хватает, и аппараты цена качество отменное. Просто народ уже подсел на андроид Ios
334 Masquerade
 
30.09.16
20:20
(266)

Покороче

var string_array = new String[] {"hello",
                   "I prefer Jelly Belly beans.",
                   "When hell freezes over!" };

            
            var all_variations = from start in Enumerable.Range(0, string_array.OrderBy(x => x.Length).FirstOrDefault().Length + 1)
                              from end in Enumerable.Range(0, string_array.OrderBy(x => x.Length).FirstOrDefault().Length + 1)
                              where start < end
                              select new { result = string_array.OrderBy(x => x.Length).FirstOrDefault().Substring(start, end - start) };


            var max_substring = String.Empty;

            foreach (var variant in all_variations.OrderByDescending(x => x.result.Length))
            {
                if (string_array.Select(word => word.IndexOf(variant.result) > -1 ? 1 : 0).Sum() == string_array.Count())
                {
                    max_substring = variant.result;
                    break;
                }
            }

            Console.Out.WriteLine(max_substring);
335 Serginio1
 
30.09.16
20:49
(334) Добавил в PasteBin

<iframe src="//pastebin.com/embed_iframe/jPaqH4dX" style="border:none;width:100%"></iframe>


http://pastebin.com/jPaqH4dX
336 Loky9
 
30.09.16
22:03
(331) Спасибо! Это было познавательно.
(334) (335) И какой вывод можно сделать?
337 Serginio1
 
30.09.16
22:49
Что в 1С не хватает Linq to SQL и Linq to Object
338 Loky9
 
30.09.16
22:52
(337) И статической типизации, конечно же.
339 Loky9
 
30.09.16
23:11
Немного побаловался с тем кодом, найденным в инете:

from itertools import permutations

def long_substr(data):
    first, substr = data[0], ''
    if len(data) > 1 and len(first) > 0:
        for i, j in permutations(range(len(first) + 1), 2):
            if j - i > len(substr) and all(first[i:j] in x for x in data):
                 substr = first[i:j]
    return substr

print(long_substr(['hello',
                   'I prefer Jelly Belly beans.',
                   'When hell freezes over!']))
340 Masquerade
 
30.09.16
23:51
(339)
Тю, так ты еще и в нете код ищешь, а потом сюда постишь...
341 Loky9
 
01.10.16
00:00
(340) Когда как. Не вижу проблемы.
342 Loky9
 
01.10.16
00:15
http://pastebin.com/qsyyjE1N - 100% моё, чтоб вопросов не было. С блэкджеком и ОРМ.
343 Masquerade
 
01.10.16
00:49
(342)
Да что там подстроку искать - скука.

Вот была задача - есть массив адресов.

Один адрес - одна строка.

Надо выдрать первую букву улицы/проспекта/площади.

На LINQ несколько строк.))))
344 Masquerade
 
01.10.16
00:49
(343)

-- На LINQ несколько строк.

Не самых коротких, правда))))
345 Serginio1
 
01.10.16
10:49
Нужно иметь ввиду, что Linq расширяем за счет своих методов расширителей. Например
http://rsdn.org/forum/prj.codejam/6569269.flat
346 Masquerade
 
01.10.16
11:15
(345)
Это ты к чему?
347 Serginio1
 
01.10.16
12:26
(346) Я к тому, что стандартная библиотека прежде всего направлена на Sql. Да и там много не хватает. Но она расширяема.
Например в C++ можно найти минимальное значение для любого типа.
В .Net метод Min только для числовых
https://msdn.microsoft.com/ru-ru/library/system.linq.enumerable.min(v=vs.110).aspx

Но можно расширить например http://rsdn.org/forum/dotnet/6506104.1

  В данном случае вместо
Enumerable.Range(0, string_array.OrderBy(x => x.Length).FirstOrDefault().Length + 1)


Можно написать

Enumerable.Range(0, string_array.MinItem(x => x.Length).Length + 1)
348 Serginio1
 
01.10.16
12:40
А вообще то для данного случая нужно было тспользовать

Enumerable.Range(0, string_array.Min(x => x.Length)+ 1)

https://msdn.microsoft.com/ru-ru/library/bb548864(v=vs.110).aspx
349 Masquerade
 
01.10.16
14:00
(348)
Так можно и всю задачу решить ОДНИМ методом расширения.

И то что "стандартная библиотека направлена на SQL" - это твои фантазии.

И "вообще-то" тебе предложили написать код - ты слился в лучших традициях.

Так что незачет.
350 Loky9
 
01.10.16
14:14
(343) [i.group(1) for i in map(re.compile(r'(?:\s+|\A)(?:ул|пр-кт|пл)(?:\.|\s+)\s*(\w)', re.I).search, adresses) if i]

Всего делов.
351 Loky9
 
01.10.16
16:08
(286) В питоне3 появился type hinting. Рантайм типы не проверяются, но любые нуждающиеся средства могут получить подсказку по типу аргумента. IDE это используют
http://savepic.su/7534189.png
352 Serginio1
 
01.10.16
21:59
(349) Нет не фатазии. Ибо стандартный Linq подходит под IQueryable

https://habrahabr.ru/post/256821/

Что касается
Enumerable.Range(0, string_array.MinItem(x => x.Length).Length + 1
То это стандартный метод. А насчет слился считай как хочешь.

(351) Вот интересно. Идут по пути TypeScript. Чего и 1С нужно брать на вооружение
353 Masquerade
 
01.10.16
22:02
(350)
Ты такой простой.

Ты не знаешь, как заданы эти сокращения, улица может быть как

ул.
у-ца
улица

и прочее. С проспектами и площадями - тоже самое.

Максимум что известно, что способ (формат) более менее одинаков.
354 Serginio1
 
01.10.16
22:03
(349)
Я не знаю чего ты так возмутился
Я просто привел стандартный Linq метод
string_array.Min(x => x.Length)

https://msdn.microsoft.com/ru-ru/library/bb548864(v=vs.110).aspx

Вместо

string_array.OrderBy(x => x.Length).FirstOrDefault().Length
355 Loky9
 
01.10.16
22:13
(353) Обычно всё что не определено во вводной берётся на своё усмотрение. Я усмотрел из "Приложение 1 к описанию классификатора адресов Российской Федерации (КЛАДР)". Если однозначно определить вхождение элемента невозможно, задача не решается.
Так что добавьте недостающие варианты в регулярку и не имейте мне мозг.
356 Masquerade
 
01.10.16
22:20
(355)

-- и не имейте мне мозг.

Да больно надо, это не я код из нета сюда пощу с лозунгами :"А ну-ка, девочки!"

Это был чисто спортивный интерес - вычислить паттерн формата адреса и извлечь из него искомое.
357 Loky9
 
01.10.16
22:24
(356) С конкретно тем кодом был подтекст спецом для Garykom
Успехов в освоении регулярок!
358 Masquerade
 
02.10.16
00:54
(355)

--Если однозначно определить вхождение элемента невозможно, _задача не решается_.

Тобой.)))

Это значит, что регулярка не работает.
А по другому ты не умеешь.

Признаешь?
359 Loky9
 
02.10.16
00:56
(358) Я могу эту примитивную задачу решать как угодно. Хватит понтов.
360 Loky9
 
02.10.16
00:57
Неточные методы дают неточные решения. Только и всего.
361 Loky9
 
02.10.16
01:07
(344) Жду обещанного решения на LINQ "в несколько строк" уже для строк произвольного формата.
Осилишь?
362 Masquerade
 
02.10.16
10:14
(361)
А ты в нете поищи.
363 Loky9
 
02.10.16
10:15
(362) Быстро ты слился.
364 Masquerade
 
02.10.16
10:28
(363)
Тебе хватит и того бисера, что я уже наметал
365 Loky9
 
02.10.16
10:30
Пока вывод: LINQ - громоздкое, бесполезное унылое уг.
366 Serginio1
 
02.10.16
12:12
(365) Ну тебе виднее. Огромная куча народа использует в том числе и для SQL. Намного удобнее 1С кого конструктора итд.
367 Mauser
 
02.10.16
22:40
(366) Когда очередную статью на хабре ждать?
368 Serginio1
 
03.10.16
10:05
(367) Наверное когда уже выйдет .Net Core 1.1
Или, что маловероятно, когда 1С добавит возможность передавать в параметрах и возвращать объекты ВК.
Сейчас займусь Xamarin. Посмотрю, что изменилось с времен 1C Messenger для отправки сообщений, файлов и обмена данными между пользователям

Если появится, что то интересное, то тоже напишу
369 Loky9
 
03.10.16
12:09
(366) Виднее. Смотри, берём код (331) и дословно транслируем:

from itertools import groupby

string_array = ['hello',
                'I prefer Jelly Belly beans.',
                'When hell freezes over!']

min_word = min(string_array, key=len)
all_indexes = range(len(min_word))
index_pairs = [(index1, index2)
               for index1 in all_indexes
               for index2 in all_indexes
               if index1 < index2]
all_variations = [min_word[start:end] for start, end in index_pairs]
_max_substring = [(len(variant), variant, variant in word, word)
                  for variant in all_variations
                  for word in string_array]
max_substring = max((gkey
                     for gkey, grp in
                     groupby(sorted(filter(lambda x: x[2], _max_substring),
                                    key=lambda x: x[1]),
                             key=lambda x: x[1])
                     if len(tuple(grp)) == len(string_array)),
                    key=len)
print(max_substring)

Исключительно на базовых средствах получилось более кратко.
370 Serginio1
 
03.10.16
13:22
(369) Тоже самое и с Linq

Там легко расширить.
И вместо
min_word = min(string_array, key=len)
all_indexes = range(len(min_word))
index_pairs = [(index1, index2)


index_pairs=Enumerable.Range(0, string_array.Min(x => x.Length- 1);

Все остальное как в .Net Core, обмен с 1C по TCP/IP между различными устройствами

Большой разницы не вижу. Особенно если ввести MinItem.


Вместо
string_array.OrderBy(x => x.Length).FirstOrDefault()

string_array.MinItem(x => x.Length)

Даже еще короче получится. А вот читаемость у Linq лучше. При этом Автодополнение итд.

Кратко, не значит понятно.
371 Loky9
 
03.10.16
21:42
(370) " Тоже самое и с Linq
Там легко расширить."

С другой стороны тоже можно расширить:

from itertools import permutations, product, groupby

def group_by(iterable, **kwargs):
    for key, grp in groupby(sorted(iterable, **kwargs), **kwargs):
        yield key, tuple(grp)

string_array = [
    'hello',
    'I prefer Jelly Belly beans.',
    'When hell freezes over!']

min_word = min(string_array, key=len)
all_variations = (
    min_word[start:end]
    for start, end in
    permutations(range(len(min_word)), 2))
usable_vars = (
    variant
    for variant, word in
    product(all_variations, string_array)
    if variant in word)
max_substring = \
    max((gkey
         for gkey, grp in
         group_by(usable_vars)
         if len(grp) == len(string_array)),
        key=len)
print(max_substring)

Кому хочется большего пишут свои линки ( https://github.com/heynemann/pynq/wiki ), или используют бронебойный http://pandas.pydata.org/pandas-docs/stable/10min.html

"А вот читаемость у Linq лучше."
Я бы не сказал. Ни SQL, ни функциональный стиль, куча дополнительных ключевых слов и с ними правил синтаксиса, борьба с типизацией.

"Кратко, не значит понятно."
Не значит, но зачастую сопутствует.
372 Serginio1
 
03.10.16
22:45
(371) Там синтаксиси именно под SQL, но сделан для того, что бы использовать intellisense.
B код под коллекции так же работает и с Таблицами SQL

http://catalog.mista.ru/public/402433/

>> Я бы не сказал. Ни SQL, ни функциональный стиль, куча дополнительных ключевых слов и с ними правил синтаксиса, борьба с типизацией.

Дело привычки, а автодополнение сокращает время написания и количество синтаксических ошибок.

  Лень вчитываться, а каков смысл твоего алгоритма?
373 Loky9
 
03.10.16
23:21
(372) "Лень вчитываться, а каков смысл твоего алгоритма?"
Это всё ещё алгоритм Masquerade .
Он берёт самую короткую строку из набора и генерирует все возможные её подстроки. Из полученного набора подстрок отбирает входящие во все строки, а из входящих самую длинную. В итоге получаем самую длинную общую подстроку, о чем спрашивали в Быстрый алгоритм наибольших общих подстрок .
Не самый оптимальный алгоритм даже для ложащихся на логику РБД, но он таки с БД работать может.
374 Garykom
 
гуру
03.10.16
23:59
(373) Интересный алгоритм задачка приводится на sql к куче like'ов
И если слегка допилить то можно реализовать "группировку" по общим подстрокам.
375 Serginio1
 
04.10.16
00:31
(373) Спасибо. Теперь понятно.
А что касается формирования подстрок, то там и без Linq можно обойтись. Опустим.
  
Сравним Linq

foreach (var variant in all_variations.OrderByDescending(x => x.result.Length))
            {
                if (string_array.Select(word => word.IndexOf(variant.result) > -1 ? 1 : 0).Sum() == string_array.Count())
                {
                    max_substring = variant.result;
                    break;
                }
            }

и Питон

_max_substring = [(len(variant), variant, variant in word, word)
                  for variant in all_variations
                  for word in string_array]
max_substring = max((gkey
                     for gkey, grp in
                     groupby(sorted(filter(lambda x: x[2], _max_substring),
                                    key=lambda x: x[1]),
                             key=lambda x: x[1])
                     if len(tuple(grp)) == len(string_array)),
                    key=len)
376 Serginio1
 
04.10.16
01:20
Или
if (string_array.Select(word => word.IndexOf(variant.result) > -1 ? 1 : 0).Sum() == string_array.Count())
                
Можно переписать

if (string_array.Count(word => word.IndexOf(variant.result) > -1 ) == string_array.Count())
                
377 Loky9
 
04.10.16
08:18
(375) "Сравним Linq
и Питон"
Ты сравниваешь различные конструкции. Приведённой тобой линковой соответствует

for variant in sorted(all_variations, key=len, reverse=True):
    if sum(variant in word for word in string_array) = len(string_array):
        max_substring = variant
        break
378 Serginio1
 
04.10.16
09:47
Ну давай сравним

if sum(variant in word for word in string_array) = len(string_array):

и

if (string_array.Count(слово=> слово.IndexOf(variant) > -1 ) == string_array.Count())
379 Serginio1
 
04.10.16
09:51
По сути это сокращенная Sql инсnруция

if (string_array.Where(слово=> слово.IndexOf(variant) > -1 ).Count() == string_array.Count())
380 Loky9
 
05.10.16
10:41
(378) Хочешь сказать линк тут понятнее? Или короче?
381 Serginio1
 
05.10.16
10:47
(380) Понятнее. Мало того эта же конструкция прекрасно ложится на SQL
382 Loky9
 
05.10.16
10:51
(381) Одна конструкция ложится на другую, но на SQL ложатся не обе? ) Так бывает? Там ещё и кириллицей тоже можно.
383 Serginio1
 
05.10.16
11:03
Вернее будет правильнее

if (string_array.Count(слово=> слово.Contains(variant) > -1 ) == string_array.Count())

А, что Unicode в SQL отменили?

Но  IndexOf работает, прорсто Contains короче

http://stackoverflow.com/questions/835790/how-to-do-sql-like-in-linq
384 Serginio1
 
05.10.16
11:04
Тьфу Копи пасте
if (string_array.Count(слово=> слово.Contains(variant)) == string_array.Count())
385 Serginio1
 
05.10.16
11:06
А внутри SQL кстати не будет никакой Киррилицы.
Почитай для интереса

Code First и Linq to EF на примере 1С версии 7.7 и 8.3 часть I
http://catalog.mista.ru/public/393228/
Продолжение здесь http://catalog.mista.ru/public/402038/

Здесь лежит практика использования http://catalog.mista.ru/public/402433/
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший