powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
25 сообщений из 98, страница 3 из 4
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735625
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlкак на нем это одной строчкой не сделатькогда паровозом несколько операторов после точки это же не одна строка по смыслу. Конвейер?
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735627
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlда фиг его знает, прост неестественность задачи смущает. студентов подобным гоняют, но в жизни я себе слабо представляю зачем стоит искать согласную букву...Это студенческая задача, но приемы, применимые для ее решения, близки к реальным задачам.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735631
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123iskatelsqlкак на нем это одной строчкой не сделатькогда паровозом несколько операторов после точки это же не одна строка по смыслу. Конвейер?
Я к тому что иногда циклом красивее чем куча в конвейере.
А иногда наоборот).
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735632
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомВо вторых - что хвостовские замашки?
А чувство юмора есть? :)

На самом деле у меня это психологическое чтоль... такая простая задача должна иметь простое решение, у меня включается паранойя и я судорожно начинаю перелистывать мануалы, где чего пропустил, даже забивая на основную задачу :)
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735638
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123что иногда циклом красивее
Никогда. Или докажи обратное.


iskatelsqlА чувство юмора есть? :)
Не в этом разделе. Тут с этим глухо.


iskatelsqlтакая простая задача должна иметь простое решение,
Всё правильно, так она и имеет. Несколько операторов LINQ-а.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735650
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомНикогда. Или докажи обратное.может наоборот. Ты покажешь противопоказания пихания linq во все дыры.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735662
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Я к тому что иногда циклом красивее чем куча в конвейере.

Ну а чего трендишь тогда? Показать ничего не можешь, но мнение имеешь?
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735686
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C# многословен.

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

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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 }) }));
        }
    }
}
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735691
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомПоказать ничего не можешь, но мнение имеешь?гениально! Мнение иметь можно только после показа)).
Продолжай. Мы слушаем.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735711
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомC# многословен.

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

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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 из базы, то я даже представить себе боюсь, как это будет работать
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735727
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesвыглядит не очень,

Это обфускация. o_O
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735758
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123когда паровозом несколько операторов после точки это же не одна строка по смыслу. Конвейер?


Это "fluent API".
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735774
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatPetro123когда паровозом несколько операторов после точки это же не одна строка по смыслу. Конвейер?


Это "fluent API".неа
авторMethod chainig (цепочки) - общее название синтаксиса в ООП, в котором несколько методов вызываются один за другим.
Это API так сделано реализовано. Не декларативно.
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39735779
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
авторМожно выделить то, что использование такого синтаксиса экономит время. Не считаю, что это стоит использовать часто. Такие классы по мере возрастания сложности становятся нечитабельными.ну а где предел сложности у всех индивидуально))
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736376
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123неа
авторMethod chainig (цепочки) - общее название синтаксиса в ООП, в котором несколько методов вызываются один за другим.
Это API так сделано реализовано. Не декларативно.

https://en.wikipedia.org/wiki/Fluent_interface
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736388
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat, ОК
Убедил))
авторСвободный интерфейс обычно реализуется путем использования цепочки методов
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736410
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Roman MejtesАгнец за бортомC# многословен.

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

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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)

Код: c#
1.
2.
3.
4.
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] });
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736415
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Агнец за бортомiskatelsqlА чувство юмора есть? :)
Не в этом разделе. Тут с этим глухо.
Нормально тут с чувством юмора. Средняя температура не отличается от других сообществ
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736423
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

result1 {1,2,3}{2,3,4}{3,4,5}
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736425
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так работает:

Код: c#
1.
var result1 = Enumerable.Range(0, m.Count() / t).Select(k => new double[] { m[k*t], m[k*t + 1], m[k*t + 2] });
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736431
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlвот так работает:

Код: c#
1.
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().
При минимуме затраченных ресурсов
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736432
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql
Код: c#
1.
m.Count()

m - это массив, не надо сувать Count(), где он не требуется
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736436
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes, Shocker.Pro,


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

кстати, Length чтоль использовать? а это "Получите IEnumerable<IEnumerable<T>> и легко сможете получить IEnumerable<T[]> без всяких count()." я вообще не понял
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736443
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlкстати, Length чтоль использовать?Ты осознаешь, что Length - это просто свойство, которое можно просто прочитать, а Count() - это метод, который получит энумератор и переберет через него все ячейки массива, чтобы узнать количество элементов, которое и так лежит в Length?

Конечно, многие задачи не имеют критичности в производительности, но не до такой же степени!
...
Рейтинг: 0 / 0
Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
    #39736444
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТы осознаешь, что Length - это просто свойство, которое можно просто прочитать

Догадывался, но конкретных подтверждений не видел, кто его знает как оно внутри устроено... Теперь будем знать
...
Рейтинг: 0 / 0
25 сообщений из 98, страница 3 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Можно ли с помощью LINQ преобразовать / разбить массив на массивы "по три"?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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