Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Можно ли с помощью LINQ преобразовать  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
iskatelsql
как на нем это одной строчкой не сделать
когда паровозом несколько операторов после точки это же не одна строка по смыслу. Конвейер?
20 ноя 18, 14:03    [21739113]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21190
iskatelsql
да фиг его знает, прост неестественность задачи смущает. студентов подобным гоняют, но в жизни я себе слабо представляю зачем стоит искать согласную букву...
Это студенческая задача, но приемы, применимые для ее решения, близки к реальным задачам.
20 ноя 18, 14:03    [21739115]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Petro123
iskatelsql
как на нем это одной строчкой не сделать
когда паровозом несколько операторов после точки это же не одна строка по смыслу. Конвейер?

Я к тому что иногда циклом красивее чем куча в конвейере.
А иногда наоборот).
20 ноя 18, 14:07    [21739121]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
iskatelsql
Member

Откуда:
Сообщений: 799
Агнец за бортом
Во вторых - что хвостовские замашки?

А чувство юмора есть? :)

На самом деле у меня это психологическое чтоль... такая простая задача должна иметь простое решение, у меня включается паранойя и я судорожно начинаю перелистывать мануалы, где чего пропустил, даже забивая на основную задачу :)
20 ноя 18, 14:07    [21739122]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Агнец за бортом
Member

Откуда:
Сообщений: 1318
Petro123
что иногда циклом красивее

Никогда. Или докажи обратное.


iskatelsql
А чувство юмора есть? :)

Не в этом разделе. Тут с этим глухо.


iskatelsql
такая простая задача должна иметь простое решение,

Всё правильно, так она и имеет. Несколько операторов LINQ-а.
20 ноя 18, 14:19    [21739136]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Агнец за бортом
Никогда. Или докажи обратное.
может наоборот. Ты покажешь противопоказания пихания linq во все дыры.
20 ноя 18, 14:32    [21739157]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Агнец за бортом
Member

Откуда:
Сообщений: 1318
Petro123
Я к тому что иногда циклом красивее чем куча в конвейере.


Ну а чего трендишь тогда? Показать ничего не можешь, но мнение имеешь?
20 ноя 18, 14:50    [21739176]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Агнец за бортом
Member

Откуда:
Сообщений: 1318
C# многословен.

Без GroupBy (почти одна строчка)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var _array = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };           

            var _divider = 3;

            var result = _array.Aggregate<int, IEnumerable<IEnumerable<int>>>(new int[][] { new int[] { } }, (acc, val) =>

            acc.Where(z => z.Count() == _divider).Union(new[] { (acc.Where(x => Enumerable.Range(1, _divider - 1).Contains(x.Count())).FirstOrDefault() ?? new int[] { }).Union(new[] { val }) }));
        }
    }
}
20 ноя 18, 15:23    [21739228]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
Агнец за бортом
Показать ничего не можешь, но мнение имеешь?
гениально! Мнение иметь можно только после показа)).
Продолжай. Мы слушаем.
20 ноя 18, 15:31    [21739241]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3663
Агнец за бортом
C# многословен.

Без GroupBy (почти одна строчка)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var _array = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };           

            var _divider = 3;

            var result = _array.Aggregate<int, IEnumerable<IEnumerable<int>>>(new int[][] { new int[] { } }, (acc, val) =>

            acc.Where(z => z.Count() == _divider).Union(new[] { (acc.Where(x => Enumerable.Range(1, _divider - 1).Contains(x.Count())).FirstOrDefault() ?? new int[] { }).Union(new[] { val }) }));
        }
    }
}

выглядит не очень, Union() x 2, Contains(), Enumerable.Range(), Count(), сдается мне, работать будет это адище очень медленно.
А если, исходными данными будет не массив в памяти, а какой нибудь recordset из базы, то я даже представить себе боюсь, как это будет работать
20 ноя 18, 15:46    [21739275]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Агнец за бортом
Member

Откуда:
Сообщений: 1318
Roman Mejtes
выглядит не очень,


Это обфускация. o_O
20 ноя 18, 16:08    [21739316]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?  [new]
fkthat
Member

Откуда:
Сообщений: 1754
Petro123
когда паровозом несколько операторов после точки это же не одна строка по смыслу. Конвейер?



Это "fluent API".
20 ноя 18, 17:12    [21739384]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat
Petro123
когда паровозом несколько операторов после точки это же не одна строка по смыслу. Конвейер?



Это "fluent API".
неа
автор
Method chainig (цепочки) - общее название синтаксиса в ООП, в котором несколько методов вызываются один за другим.

Это API так сделано реализовано. Не декларативно.
20 ноя 18, 17:39    [21739409]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat,
автор
Можно выделить то, что использование такого синтаксиса экономит время. Не считаю, что это стоит использовать часто. Такие классы по мере возрастания сложности становятся нечитабельными.
ну а где предел сложности у всех индивидуально))
20 ноя 18, 17:49    [21739417]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?  [new]
fkthat
Member

Откуда:
Сообщений: 1754
Petro123
неа
автор
Method chainig (цепочки) - общее название синтаксиса в ООП, в котором несколько методов вызываются один за другим.

Это API так сделано реализовано. Не декларативно.


https://en.wikipedia.org/wiki/Fluent_interface
21 ноя 18, 19:30    [21740530]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat, ОК
Убедил))
автор
Свободный интерфейс обычно реализуется путем использования цепочки методов
21 ноя 18, 20:03    [21740557]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145678
Roman Mejtes
Агнец за бортом
C# многословен.

Без GroupBy (почти одна строчка)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var _array = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };           

            var _divider = 3;

            var result = _array.Aggregate<int, IEnumerable<IEnumerable<int>>>(new int[][] { new int[] { } }, (acc, val) =>

            acc.Where(z => z.Count() == _divider).Union(new[] { (acc.Where(x => Enumerable.Range(1, _divider - 1).Contains(x.Count())).FirstOrDefault() ?? new int[] { }).Union(new[] { val }) }));
        }
    }
}


выглядит не очень, Union() x 2, Contains(), Enumerable.Range(), Count(), сдается мне, работать будет это адище очень медленно.
А если, исходными данными будет не массив в памяти, а какой нибудь recordset из базы, то я даже представить себе боюсь, как это будет работать

Однако не выдает то, что надо. В первом измерении уже 4 каких-то объекта.

Что мне еще местный гурии посоветую изучить?

Вариации на тему со скрытым циклом (Enumerable.Range)

var m = new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var t = 3;
            var result0 = Enumerable.Range(0, m.Count() / t).Select(k=> m.Skip(k * t).Take(t).ToArray());
            var result1 = Enumerable.Range(0, m.Count() / t).Select(k => new double[] { m[k], m[k+1], m[k+2] });
21 ноя 18, 21:11    [21740588]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145678
Агнец за бортом
iskatelsql
А чувство юмора есть? :)

Не в этом разделе. Тут с этим глухо.

Нормально тут с чувством юмора. Средняя температура не отличается от других сообществ
21 ноя 18, 21:18    [21740593]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
iskatelsql
Member

Откуда:
Сообщений: 799
Cat2,

result1 {1,2,3}{2,3,4}{3,4,5}
21 ноя 18, 21:29    [21740605]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
iskatelsql
Member

Откуда:
Сообщений: 799
вот так работает:

var result1 = Enumerable.Range(0, m.Count() / t).Select(k => new double[] { m[k*t], m[k*t + 1], m[k*t + 2] });
21 ноя 18, 21:34    [21740608]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3663
iskatelsql
вот так работает:

var result1 = Enumerable.Range(0, m.Count() / t).Select(k => new double[] { m[k*t], m[k*t + 1], m[k*t + 2] });
Count(), это сразу на помойку, используйте IEnumerator, не надо мучать жопу там, где в этом нет никакого смысла.
Получите IEnumerable<IEnumerable<T>> и легко сможете получить IEnumerable<T[]> без всяких count().
При минимуме затраченных ресурсов
21 ноя 18, 21:46    [21740617]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21190
iskatelsql
m.Count()
m - это массив, не надо сувать Count(), где он не требуется
21 ноя 18, 21:47    [21740618]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
iskatelsql
Member

Откуда:
Сообщений: 799
Roman Mejtes, Shocker.Pro,


Если вы обратите внимание, это не мой код... я туда только *t добавил...

кстати, Length чтоль использовать? а это "Получите IEnumerable<IEnumerable<T>> и легко сможете получить IEnumerable<T[]> без всяких count()." я вообще не понял
21 ноя 18, 21:50    [21740622]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21190
iskatelsql
кстати, Length чтоль использовать?
Ты осознаешь, что Length - это просто свойство, которое можно просто прочитать, а Count() - это метод, который получит энумератор и переберет через него все ячейки массива, чтобы узнать количество элементов, которое и так лежит в Length?

Конечно, многие задачи не имеют критичности в производительности, но не до такой же степени!
21 ноя 18, 22:26    [21740645]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли с помощью LINQ преобразовать  [new]
iskatelsql
Member

Откуда:
Сообщений: 799
Shocker.Pro
Ты осознаешь, что Length - это просто свойство, которое можно просто прочитать


Догадывался, но конкретных подтверждений не видел, кто его знает как оно внутри устроено... Теперь будем знать
21 ноя 18, 22:28    [21740647]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / WinForms, .Net Framework Ответить