Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.03.2022
Сообщений: 5

LINQ. При выводе на консоль появляются квадратные скобки

16.03.2022, 13:41. Показов 1213. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день прошу помощи.

При разработке Парсера на С# столкнулся с проблемой.
А именно при выводе на консоль появляться квадратные скобки.

Как убрать их если это возможно?

Код;

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Microsoft.Win32;
using System.Text.RegularExpressions;
 
namespace Parsing_4_0
{
    class Program
    {
        static void Main(string[] args)
        {
 
 
            Regex typgex = new Regex("(?<=NORM=).*");
 
            Regex Matgex = new Regex("(?<=MATERIAL=).*");
 
            string[] allfiles = Directory.GetFiles(@"C:\Users\Яков\Desktop\Parser", "*.mgf");
 
            //var profilist = new List<string>();
            //var mateilist = new List<string>();
            string profilist = " ";
            string mateilist = " ";
            string Products = " ";
            var allProducts = new List<string>();
            for (int i = 0; i < allfiles.Length; i++)
            {
 
                //string[] fai = File.ReadAllLines(allfiles[i], Encoding.Default);
 
 
                var fai = File.ReadLines(allfiles[i], Encoding.Default).ToList();
 
                      
                //Console.Write(allfiles[i]);
 
                foreach (string s in fai)
                {
                    if (typgex.IsMatch(s)) 
                    {
                        profilist = (typgex.Match(s).Value);
                    }
 
                    if (Matgex.IsMatch(s)) 
                    {
 
                        mateilist = (Matgex.Match(s).Value);
                    }
                     
                    Products =$"{profilist} {mateilist}";
 
                    
                }
                    allProducts.Add(Products);
                    //Console.WriteLine(Products);
                   
            }
                
            int numer = 1;
            var query1 = allProducts.GroupBy(x => x)
              .Where(g => g.Count() > 0)
              .ToDictionary(x => x.Key, y => y.Count())
              .Select(r => $"{numer++} {r}");
 
            
 
            Console.WriteLine("пример2");
 
            foreach (var fem in query1)
            {
                Console.WriteLine(fem);
                //Console.WriteLine(fem.Value);
            }
 
 
            Console.ReadLine();
 
        }
 
 
    }
}

Результат;

1 [FB100X10 St37-2, 1]
2 [FB140X16 St37-2, 3]
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2022, 13:41
Ответы с готовыми решениями:

Круглые и квадратные скобки при операторе new
Требуются помощь в использовании оператора new! И так для начала вопросы для понимания, что произойдет при выполнении 2-ух вариантов кода...

Почему в цикле используются квадратные скобки при присвоении словаря?
&gt;&gt;&gt; dict = {} &gt;&gt;&gt; list = &gt;&gt;&gt; for x in range(0,100): ... dict = x ... list.append(dict) ... &gt;&gt;&gt; print...

Задание 1 Определить, корректно ли расставлены в строке круглые и квадратные скобки. Скобки могут быть вложенными. Входные данные: ab(h[b55](0123)jw(
помогите решить

10
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18275 / 14198 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
16.03.2022, 14:52
Лучший ответ Сообщение было отмечено AndreyVorobey как решение

Решение

TugarinZmiy, вот тут переменная r это KeyValuePair
C#
67
              .Select(r => $"{numer++} {r}");
Значит идет вызов его перегрузки ToString() где и добавляются скобки. Хотите убрать? Выводите Key и Value сами.
C#
67
              .Select(r => $"{numer++} {r.Key} {r.Value}");
P.S. Использование переменной numer ведет к т.н. замыканию которое только усложняет код. Я бы использовал перегрузку Select которая сама нумерует элементы
C#
67
              .Select((r,idx) => $"{idx+1} {r.Key} {r.Value}");
1
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
16.03.2022, 15:08
OwenGlendower, это скорее не перегрузка ToString, а стандартное поведение обычного ToString при выводе экземпляра коллекции.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApp374
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Data> datas = new List<Data>()
            {
                new Data(){ col1 = "c1", col2 = "c2" },
                new Data(){ col1 = "c3", col2 = "c4" }
            };
 
            foreach(var row in datas.Select(s => new { s.col1, s.col2 }))
            {
                Console.WriteLine(row);
            }
            foreach (var row in datas.ToDictionary(s1 => s1.col1, s2 => s2.col2 ))
            {
                Console.WriteLine(row);
            }
        }
    }
    public class Data
    {
        public string col1;
 
        public string col2;
    }
}
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18275 / 14198 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
16.03.2022, 16:17
AndreyVorobey, а Console.WriteLine() не вызывает ToString() что-ли? Про "обыкновенность ToString()" тоже не понял. Вывод разный получается
Code
1
2
3
4
{ col1 = c1, col2 = c2 }
{ col1 = c3, col2 = c4 }
[c1, c2]
[c3, c4]
В первом цикле у нас анонимный класс для которого компилятор сам генерирует ToString(). Во-втором случае у нас снова KeyValuePair поведение ToString() которого мы уже выяснили. Коллекции тут тоже ни при чем т.к. они не влияют не форматирование своих элементов.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
16.03.2022, 16:19
OwenGlendower, ну так Вы же сами написали
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Значит идет вызов его перегрузки ToString() где и добавляются скобки
я показал, что никакого переопределения нету
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18275 / 14198 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
16.03.2022, 16:32
AndreyVorobey, вы показали что перегрузка ToString() анонимного класса отличается от перегрузки ToString() структуры KeyValuePair<TKey, TValue> которая добавляет квадратные скобки. В исходном коде под .NET Framework и .NET Core это видно невооруженным взглядом.

Цитата Сообщение от AndreyVorobey Посмотреть сообщение
ну так Вы же сами написали
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Значит идет вызов его перегрузки ToString()
Переменная имеет тип KeyValuePair у которого есть перегрузка ToString(). При подстановке в интерполируемую строку или вызове Console.WriteLine будет вызван ToString() для объекта. Все правильно я написал.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
16.03.2022, 16:36
OwenGlendower, понял, показалось что про ручное переопределение писали. спасибо
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18275 / 14198 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
16.03.2022, 17:19
AndreyVorobey, что такое ручное переопределение в контексте виртуальных методов вообще и ToString в частности?
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
16.03.2022, 17:21
OwenGlendower, я про override
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18275 / 14198 / 5368
Регистрация: 17.03.2014
Сообщений: 28,881
Записей в блоге: 1
16.03.2022, 17:24
AndreyVorobey, ясно. Спасибо.
0
0 / 0 / 0
Регистрация: 15.03.2022
Сообщений: 5
17.03.2022, 09:43  [ТС]
Спасибо помогло .Select((r,idx) => $"{idx+1} {r.Key} {r.Value}");
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.03.2022, 09:43
Помогаю со студенческими работами здесь

Появляются какие-то левые скобки при редактировании JSON файла
Открываю JSON, добавляю элементы и иногда встаёт криво(появляются посреди словаря скобки) , данную проблему наблюдаю уже около 3 месяцев,...

При выводе на экран появляются лишние символы
#include &lt;iostream&gt; // ??? printf #include &lt;string.h&gt; // ??? strtok bool IsPalindrom (char *word) { int i = -1; int j =...

Фигурные скобки при выводе переменных
Подскажите пожалуйста, как выводить переменные в фигурных скобках, например: {name}

При выводе на экране появляются непонятные рандомные числа
На этапе ознакомления с массивами столкнулся с такой проблемой #include&lt;stdio.h&gt; int main(){ int m ; int a =...

При выводе двумерного массива появляются какие-то кракозябры
Делаю игру в консоли, для отображения карты выбрал двумерный массив. Но если я компилирую то сначала выводится кусочек нужного мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru