Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/179: Рейтинг темы: голосов - 179, средняя оценка - 4.98
12 / 12 / 3
Регистрация: 17.08.2010
Сообщений: 84

Инициализация массива списков

27.10.2010, 08:36. Показов 34659. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Нужно инициализировать массив списков.
Пишу вот так, но так инициализируется только массив (приходится потом каждый элемент List инициализировать отдельно):

List<int> [] mas = new List<int> [6];

А как сразу полностью инициализировать массив списков?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2010, 08:36
Ответы с готовыми решениями:

Компактная инициализация списка списков
Чтобы составить двумерный несимметричный массив из заранее известных объектов, делаю так: //основной список List&lt;MyObject&gt;...

Копирование данных двумерного массива состоящего из списков в список списков.
Для нахождения МСТ (минимального остового дерева) написал функцию, которая принимает масив - гарф. private List&lt;Point&gt;...

Инициализация массива
Как задать N , чтобы его можно было потом изменить? Знаю , что можно задать какое-то число и от этого оно заработает, но смысл же в том,...

15
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
27.10.2010, 10:34
Никак) в любом случае прийдется инициализировать каждый элемент отдельно.
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
27.10.2010, 11:28
только так
C#
1
2
3
4
5
List<int> [] mas = new List<int> [6];
for (int i=0;i<mas.Lenght;i++)
{
    mas[i] = new List<int>();
}
1
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.10.2010, 11:49
Частично ошибаетесь народ
Есть 2 варианта (по крайней мере то что в голову пришло):
1) Создать вот такой метод и пропускать через него нужный массив:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        void InitArray(Array arr)
        {
            int len = arr.Length;
 
            for (int i = 0; i < len; i++)
            {
                arr.SetValue(arr.GetType().GetElementType().GetConstructors()[0].Invoke(null), i);
            }
        }
 
// Применение:
List<int>[] arr = new List<int>[10];
InitArray(arr);
2) Создать метод расширения (.NET 3.5):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public static class ArrayExtension
    {
        public static void InitArray(this Array arr)
        {
            int len = arr.Length;
 
            for (int i = 0; i < len; i++)
            {
                arr.SetValue(arr.GetType().GetElementType().GetConstructors()[0].Invoke(null), i);
            }
        }
    }
 
// Применение:
List<int>[] arr = new List<int>[10];
arr.InitArray();
При желании можно немного упростить, (возможно) ускорить.
0
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
27.10.2010, 11:54
но посути то, что получается ты все равно инициализируешь каждый элемент отдельно.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.10.2010, 11:57
Я ж написал:
Цитата Сообщение от SSTREGG Посмотреть сообщение
Частично ошибаетесь
А по сути это универсально + иначе массив (не каждый) по другому не инициализировать (перебором т.е.).
0
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
27.10.2010, 12:05
Извини не так прочитал)
0
 Аватар для Necronomicron
65 / 50 / 7
Регистрация: 09.11.2012
Сообщений: 219
21.06.2013, 17:40
Может я неправильно понял вопрос, но "сразу" делается так:
C#
1
2
3
4
5
6
7
8
9
            List<int>[] mas = new List<int>[6]
            {
                new List<int>() { 1, 4, 5 },
                new List<int>() { 13 },
                new List<int>() { -2532, 2 },
                new List<int>() { 0, 0, 0 },
                new List<int>() { 255 },
                new List<int>() { 10, 20, 30 }
            };
0
1 / 1 / 0
Регистрация: 24.04.2013
Сообщений: 24
21.06.2013, 17:57
@Necronomicron, видимо не правильно =) Тут все равно перебирается каждый список, только в несколько ином виде.
0
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 21
07.04.2015, 13:06
Насколько верен следующий код?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void extract_Sentence_Words()
        {
            sting tempWORD = "";
            for (int i = 0; i < Sentence.Sentences; i++)
            { 
                Words = new List<string>[i]();
                for (int j = 0; j < Sentence.Text[i].Length; j++)
                {
                    if (char.IsLetter(Sentence.Text[j])) tempWORD += Sentence.Text[j];
                    else
                    {
                        j++;
                        Words[i].Add(tempWORD);
                        tempWORD = "";
                    }
                }
            }
        }
стоит задача вытаскивать каждое слово по отдельности. При этом кол-во списков = кол-ву предложений в тексте. Т.е. надо из первого предложения все слова вытащить в первый список, из второго- во второй итд. Сам массив списков объявлен в глобальной области вот так
C#
1
List<string>[] Words;
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
07.04.2015, 13:20
В этом коде я не вижу ничего общего с тем, что вы описали. Давайте подробнее. И остальной код, который участвует в этом методе тоже нужен.
Цитата Сообщение от sky49rus Посмотреть сообщение
глобальной области
Какая еще глобальная область? скажите грамотно, это поле класса.
0
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 21
07.04.2015, 13:29
Ну как это не видишь?))
Есть Список предложений, кол-во которых хранится в Sentence.Sentences, а их текст в Sentence.Text.
Сначала открываем цикл который будет перебирать по прелдожению. Внутри этого цикла открываем еще один, который выделяет каждое слово и записывает в список Words, индекс которого совпадает с счетчиком предложений.
Если текущий символ не буква, то счетчик его пропускает.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
07.04.2015, 14:15
Цитата Сообщение от sky49rus Посмотреть сообщение
Sentence.Sentences, а их текст в Sentence.Text.
Так вот где их код? я должен догадываться как он выглядит?
Вообще кол-во это например sentencesCount. Четко и понятно.

Words это что? массив списков? тогда надо так.
C#
1
Words[i] = new List<string>();
Второй цикл вообще не нужен. Для разделения предложения на слова, используйте Split

А для этого
C#
1
tempWORD += Sentence.Text[j]
Есть класс StringBuilder
p.s. и почему класс предложение, если у вас там много предложений.
1
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 21
07.04.2015, 15:17
сам класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    class Sentence
    {
        public static int Sentences { get; set; }
        public static List<string> Sentenceform { get; set; }
        public static List<string> Sentencetype { get; set; }
        public static List<string> Questiontype { get; set; }
        public static List<string> Text { get; set; }
 
        static Sentence()
        {
            Sentenceform = new List<string>();
            Sentencetype = new List<string>();
            Questiontype = new List<string>();
            Text = new List<string>();
        }
        public string this[int idx]
        {
            get { return Text[idx]; }
            set { Text[idx] = value; }
        }
    }
функция предшествующая extract_Sentence_Words()
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
private void getSentences(string S)
        {
            string temp = "";
            Sentence.Sentences = 0;
            string tempNOPUNCT = "";
            int lastdot = 0;
            try {Sentence.Text.Clear(); Sentence.Sentencetype.Clear(); Sentence.Sentenceform.Clear(); Sentence.Questiontype.Clear();}
            catch (Exception) {};
            while (S.Contains("  ")) S = S.Replace("  ", " ");
            while (S.Contains("..")) S = S.Replace("..", ".");  
            while (S.Contains("!!")) S = S.Replace("!!", "!");
            while (S.Contains("??")) S = S.Replace("??", "?");
            while (S.Contains(";;")) S = S.Replace(";;", ";");
            while (S.Contains("::")) S = S.Replace("::", ":");
            for (int i = 0; i < S.Length; i++)
            {
                temp += S[i];   
            }
            if (!(temp.Contains(".") || temp.Contains("?") || temp.Contains("!") || temp.Contains(":")))
            {
                temp += '.';
                Sentence.Text.Add(temp);
                Sentence.Sentencetype.Add("state");
                Sentence.Sentences++;
                clearlists();
                temp = "";
            }
            else
            {
                temp = "";
                for (int i = 0; i < S.Length; i++)
                {
                    if (S[i] == ' ' && (char.IsLetter(S[i + 1]) || char.IsPunctuation(S[i + 1])))
                    {
                        if (i == 0) i++;
                        else
                        {
                            if (!(char.IsLetter(S[i - 1]) && char.IsLetter(S[i + 1]))) i++;
                        }
                    }
                    if (S[i] != '.' && S[i] != '!' && S[i] != '?' && S[i] != ':')
                    {
                        if (S[i] == '\n')
                        { if (S[i] != S.Length) i++; }
                        else temp += S[i];
                    }
                    else
                    {
                        temp += S[i];
                        lastdot = i;
                        for (int dot = lastdot; dot < S.Length; dot++)
                        {
                            if (S[dot] == '.' || S[dot] == '?' || S[dot] == '!' || S[dot] == ':')
                            {
                                lastdot = dot;
                                tempNOPUNCT = "";
                            }
                            else tempNOPUNCT += S[dot];
                        }
                        Sentence.Text.Add(temp);
                        if (S[i] == '?') Sentence.Sentencetype.Add("question");
                        else if (S[i] == '.' || S[i] == '!' || S[i] == ':') Sentence.Sentencetype.Add("state");
                        Sentence.Sentences++;
                        temp = "";
                    }
                }
            }
            if (!String.IsNullOrEmpty(tempNOPUNCT))
            {
                tempNOPUNCT += '.';
                Sentence.Text.Add(tempNOPUNCT);
                Sentence.Sentencetype.Add("state");
                Sentence.Sentences++;
                clearlists();
            }
            string[] denySubstr = {"do not", "don\'t", "does not", "doesn\'t", "am not", "'m not", "have not", "haven\'t", "has not",
                                    "hasn\'t", "is not", "isn\'t", "are not", "aren\'t", "did not", "didn\'t", "were not", "weren\'t",
                                    "was not", "wasn\'t", "have not had", "haven\'t had","has not had", "hasn\'t had", "had not had", 
                                    "hadn\'t had", "will not have", "won\'t have", "will not", "won\'t"};
            string[] questionGEN = {"Do", "Does","Is", "Are", "Am", "Have", "Has", "Did", "Were", "Was",  "Had", "Will"};
            string[] questionwh = {"What ", "Where", "Why ", "Who ", "When", "Which"};
            string[] questionTAG = {", is it?", ", isn\'t it?", ", is she?", ", isn\'t she?", ", are they?", ", aren\'t they?", ", are you?",
                                    ", aren\'t you?", ", is he?", ", isn\'t he?", ", am I?", ", aren\'t I?", ", do you?", ", do they?", ", don\'t you?",
                                    ", don\'t they?", ", does he?", ", doesn\'t he?", ", does she?", ", doesn\'t she?", ", do we?", ", don\'t we?", ", do I?",
                                    ", don\'t I?", ", has he?", ", hasn\'t he?", ", has she?", ", hasn\'t she?", ", has it?", ", hasn\'t it?", ", have you?",
                                    ", haven\'t you?", ", have they?", ", haven\'t they?", ", have we?", ", haven\'t we?", ", have I?", ", haven\'t I",
                                    ", will you?", ", won\'t you?", ", will he?", ", won\'t he?", ", will she?", ", won\'t she?", ", will they?",
                                    ", won\'t they?", ", will I?", ", won\'t I", ", was I?", ", was\'t I?", ", was he?", "wasn\'t he?", ", was she?",
                                    ", wasn\'t she?", ", was it?", ", wasn\'t it?", ", were they?", ", weren't they?"};
            string tempWH = "";
            string tempGEN = "";
            for (var j = 0; j < Sentence.Sentences; j++)
            {
                bool containsAnyDenySubst = denySubstr.Any(s => Sentence.Text[j].Contains(s));
                bool containsWHquestion = questionwh.Any(s => tempWH.Contains(s));
                bool containsTAGquestion = questionTAG.Any(s => Sentence.Text[j].Contains(s));
                bool containsGENquestion = questionGEN.Any(s => tempGEN.Contains(s));
                if (Sentence.Sentencetype[j] == "state")
                {
                    if (containsAnyDenySubst) Sentence.Sentenceform.Add(" deny");
                    else Sentence.Sentenceform.Add(" pos");
                }
                else
                {
                    if (containsAnyDenySubst) Sentence.Sentenceform.Add("quest_deny");
                    else Sentence.Sentenceform.Add("quest_pos");
                    for(int k = 0; k < (Sentence.Text[j].Length - (Sentence.Text[j].Length - 5));k++)
                    {
                        temp3+=Sentence.Text[k];
                    }
                    while (tempWH.Contains(" ")) tempWH = tempWH.Replace(" ", "");
                    if(containsWHquestion) Sentence.Questiontype.Add("wh_question");
                    else
                    {
                        if(containsTAGquestion) Sentence.Questiontype.Add("tag_question");
                        else
                        {
                            for(int g = 0; g < (Sentence.Text[j].Length - (Sentence.Text[j].Length - 5));g++)
                            {
                                tempGEN+=Sentence.Text[g];
                            }
                            while (tempGEN.Contains(" ")) tempGEN = tempGEN.Replace(" ", "");
                            if(containsGENquestion) Sentence.Questiontype.Add("general_question");
                            else if(containsGENquestion && Sentence.Text[j].Contains("or")) Sentence.Questiontype.Add("alt_question");
                            else if(containsdenySubstr) Sentence.Questiontype.Add("neg_question");
                        }
                    }
                    tempWH="";
                    tempGEN = "";
                }
            }
            /*for(int res = 0; res < Sentence.Sentences; res++)
            {
                targettxt.Text += res + 1 + "-" + Sentence.Text[res] + "-" + Sentence.Sentencetype[res] + "-" + Sentence.Sentenceform[res];
                if(Sentence.Sentencetype[res] == "question") targettxt.Text += "-" + Sentence.Questiontype[res] + "\n";
                else targettxt.Text += "\n";
            }*/
        }
далее идет еще пару функций, но на данный момент их можно не учитывать, они выполняют совсем другие действия, а после них уже
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        private void extract_Sentence_Words()
        {
            sting tempWORD = "";
            for (int i = 0; i < Sentence.Sentences; i++)
            { 
                Words[i] = new List<string>();
                for (int j = 0; j < Sentence.Text[i].Length; j++)
                {
                    if (char.IsLetter(Sentence.Text[j])) tempWORD += Sentence.Text[j];
                    else
                    {
                        j++;
                        Words[i].Add(tempWORD);
                        tempWORD = "";
                    }
                }
                /*for(int res = 0; res < Words[i].Length; res++)
                {
                    targettxt += "LIST#" + i + 1 + ":" + res + 1 + "-" + Words[i][res] + "\n";
                }*/
            }

класс sentence, а не Text, т.к. мне удобнее будет потом работать с каждым предложением по отдельности.
То что закоментено исключительно для проверки правильности записи. Функция getSentences тоже еще недоработана, будет еще некоторые характеристики предложения определять, но на данном этапе это не важно

За Split, спасибо! как то и забыл про него. буду дома кумекать.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
07.04.2015, 15:44
Ого, а работает то? быстро?
Меня простое подобное в жуть приводит
C#
1
2
3
4
for (int i = 0; i < S.Length; i++)
{
       temp += S[i];   
}
Когда можно:
C#
1
temp+=S;
Имхо, нужен просто дикий рефакторинг
0
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 21
08.04.2015, 08:46
проверял на тексте из 20 предложений, работает мгновенно.

Добавлено через 16 часов 54 минуты
Не помню уже на что именно, но ругалась студия если индекс не указывать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.04.2015, 08:46
Помогаю со студенческими работами здесь

Инициализация массива
Моя задача Кнопка1: вывожу массив, заполненный рандомными числами, размерностью, введенной с клавиатуры. Кнопка2: вывожу массив элементов,...

Инициализация элементов массива
В C# новичок) Программа, задающая массив с numericUpDown и суммирующая его элементы.Компиллировать отказывается namespace Array ...

Инициализация многомерного массива
Помогите заполнить многомерный массив этим массивом ДАЗРВС ТУЕПОМ ЙБГЖИК ЛНФХЦЧ ШЩЪЫЬЭ ЮЯ. ,- (четвёртый символ - это...

Инициализация массива структур
суть в чем. есть структура SS полем которой является матрица S. есть массив x - содержащий 8 элементов типа SS. struct SS ...

Инициализация массива в структуре
Есть Делфи код: type S100 = string; PointRec = record i:word; c:longint; d:char; end; end; ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru