Хобрук: Ваш путь к мастерству в программировании

создание подсписка списка при некотором условии C#

Я хочу создать подсписок списка при некотором условии, но не знаю, как это сделать. Вот пример:

предположим, что у нас есть числа от 1 до 5, и каждое число имеет подмассив/массив.

1: 1 5 7 5 5 3 4 9
2: 0 1 2 3 4 6 3 4
3: 9 4 6 7 0 0 3 1
4: 4 6 3 7 8 0 0 1
5: 8 0 3 1 0 2 4 6

Числа, которые идут после :, я буду сохранять в массиве, чтобы получить быстрый доступ.

Теперь я хочу сначала создать список размером 5 (числа от 1 до 5) и подсписок для каждого числа при этом условии:

if(list[i] > (arr1[j] + 1))
{
   //then save it in a sublist of the index i
}

Мой желаемый результат будет таким:

List
    [1]
       [5]
       [7]
       [5]
       [5]
       [2]
       [4]
       [9]
    [2]
       [4]
       [6]
       [4]
    .
    .
    .
    [5]
       [8]

Я мог бы создать первый список

List<int> List1 = new List<int>();
for (int i = 0; i < 5; i++)
{
    List1.Add(i);
}

но как я могу создать подсписок?

Обновление: я пытался

List<Tuple <int,int>> List1 = new List<Tuple <int,int>>();

но это не могло помочь.

08.12.2015

  • Я мог бы создать первый список с помощью.... Нет, потому что List1.Add(j) не компилируется. Переменная цикла i, а не j. Вопрос не очень ясен, по крайней мере, не для меня. 08.12.2015
  • @TimSchmelter Я исправляю. это была опечатка в индексе;) 08.12.2015
  • Я думаю, он хочет отфильтровать числа, которые меньше, чем индекс, в котором они размещены. 08.12.2015
  • Почему ответ для 2-й строки 4 6 4, а не 3 4 6 3 4? 08.12.2015
  • @DmitryBychenko наверное опечатка 08.12.2015
  • @DmitryBychenko Условие if th numbers is greater than (2+1), что означает все числа больше 3. 08.12.2015
  • @Saber: в таком случае, почему последняя строка 8 6, а не просто 8? (5 + 1 == 6) и поэтому 6 не должно появляться 08.12.2015
  • @DmitryBychenko извините, вы правы. Я редактирую это. 08.12.2015

Ответы:


1

Попробуйте с этим

List<Tuple <int,List<int>>> list = new List<Tuple <int,List<int>>>();

//populate the list 

if(list[i].Item1 > (arr1[j] + 1))
{
    list[i].Item2.Add(arr1[j]); 
}

Насколько я понимаю, это ввод

1: 1 5 7 5 5 3 4 9
2: 0 1 2 3 4 6 3 4
3: 9 4 6 7 0 0 3 1
4: 4 6 3 7 8 0 0 1
5: 8 0 3 1 0 2 4 6

И вывод должен быть таким:

1: 5 7 5 5 3 4 9
2: 4 6 4
3: 9 6 7
4: 6 7 8
5: 8

Таким образом, на основе элементов индекса, которые меньше или равны индексу, следует исключить

08.12.2015
  • Можете ли вы сказать мне, что пытается сделать ОП и почему это не сработало? 08.12.2015
  • Он пытается добавить список в определенный индекс 08.12.2015
  • @TimSchmelter обновил ответ, чтобы вы лучше поняли вопрос 08.12.2015
  • Это работает, когда if состояние меняется, а у меня совершенно другое состояние, не связанное с List? Я имею в виду, что у меня есть что-то еще в If, а затем я использую только list[i].Item2.Add(**); 08.12.2015
  • я не понимаю, что ты хочешь сделать 08.12.2015
  • хорошо, если вместо if(list[i].Item1 > (arr1[j] + 1) у меня есть другое условие, которое не учитывает/не связывает мой определенный список list. НАПРИМЕР. что-то вроде string str; if(str.Equals("hello")). 08.12.2015
  • вы можете изменить его так, как хотите, исходя из того, что вам нужно 08.12.2015
  • @csharpwinphonexaml, у меня есть один вопрос по поводу этого метода. Я имею в виду, что пусть список с самого начала пуст, и внутри цикла for я добавлю новых членов, будет ли этот метод работать? 11.12.2015

  • 2

    Вы можете попробовать Linq:

      List<int[]> source = new List<int[]>() {
        new int[] { 1, 5, 7, 5, 5, 3, 4, 9},
        new int[] {0, 1, 2, 3, 4, 6, 3, 4},
        new int[] {9, 4, 6, 7, 0, 0, 3, 1},
        new int[] {4, 6, 3, 7, 8, 0, 0, 1},
        new int[] {8, 0, 3, 1, 0, 2, 4, 6},
      };
    
      var result = source
        .Select((array, index) => array
          .Where(item => item > index + 2) // +2 since index is zero-based
          .ToArray()); // ToArray is not necessary here, but convenient for further work
    
      // Test
    
      String report = String.Join(Environment.NewLine, 
        result.Select(item => String.Join(", ", item)));
    
      Console.Write(report);
    

    Выход

       5, 7, 5, 5, 3, 4, 9
       4, 6, 4
       9, 6, 7
       6, 7, 8
       8
    

    Изменить: для произвольных индексов я предлагаю использовать словарь с ключом, используемым в качестве индекса:

      Dictionary<int, int[]> source = new Dictionary<int, int[]>() {
        {1, new int[] { 1, 5, 7, 5, 5, 3, 4, 9}},
        {2, new int[] { 0, 1, 2, 3, 4, 6, 3, 4}},
        {3, new int[] { 9, 4, 6, 7, 0, 0, 3, 1}},
        {4, new int[] { 4, 6, 3, 7, 8, 0, 0, 1}},
        {5, new int[] { 8, 0, 3, 1, 0, 2, 4, 6}},
      };
    
      var result = source
        .Select(pair => pair.Value
           .Where(item => item > pair.Key + 1)
           .ToArray());
    
    08.12.2015
  • Что делать, если номера индексов не по порядку? 08.12.2015
  • @csharpwinphonexam: если номер индекса на самом деле является произвольным числом, я предлагаю использовать Dictionary<int, int[]>, где ключ - это индекс 08.12.2015
  • Вот о чем я подумал: List‹tuple‹int,‹list‹int››› казался слишком сложным для этого требования. 08.12.2015
  • Новые материалы

    Статическая типизация в TypeScript: основы Typescript
    Понимание статической типизации TypeScript, расширенный набор JavaScript, был разработан Microsoft в 2012 году для устранения некоторых ограничений JavaScript. Одним из его основных предложений..

    Как использовать SAAS на благо вашего бизнеса
    В деловом мире SAAS (программное обеспечение как услуга) становится все более популярным. И неудивительно, почему — SAAS предоставляет ряд преимуществ для предприятий любого размера. Вот лишь..

    Приложения случайного блуждания, часть 1 (статистика + машинное обучение)
    Смещенное случайное блуждание при динамической перколяции (arXiv) Автор: Себастьян Андрес , Нина Гантерт , Доминик Шмид , Перла Сузи Аннотация: мы изучаем смещенные случайные..

    Интеллектуальная масштабируемая обработка видео в реальном времени в Azure
    1. Введение В этом руководстве создается сквозной проект для интеллектуальной масштабируемой обработки видео в реальном времени в Azure. При этом создается возможность обнаруживать граффити и..

    Варианты использования положительной изотропной кривизны, часть 6 (машинное обучение)
    Четыре-орбифолды с положительной изотропной кривизной (arXiv) Автор : Хун Хуан Аннотация: Мы доказываем следующий результат: Пусть (X,g0) — полное связное 4-многообразие с равномерно..

    Внутри эпистатических сетей
    Регуляция нейронных сетей для лучшего прогнозирования ландшафтов биологической пригодности Сопоставьте свой индуктивный уклон с областью вашей проблемы Всем алгоритмам машинного обучения..

    Создание полноценного интерфейса командной строки с использованием Python | Расширенный Python
    Создание полноценного интерфейса командной строки с использованием Python — Advanced Python Чтобы изучить расширенные функции языка программирования, вам следует попробовать создать..