Удалить пустые записи из списка списка строк - PullRequest
0 голосов
/ 22 октября 2018

Я ищу более эффективный способ удаления пустых строковых значений из списка списка строк.

Приведенный ниже код работает, но для очень большого набора данных это кажется неэффективным.Есть ли более эффективный способ сделать это?

К вашему сведению - для начала нужно просто создать набор данных, чтобы иметь список из списка, который содержит пустые строки

public static void Main()
{       
    //Building the data set
    List<List<string>> list = new List<List<string>>();
    list.Add(new List<string> {"One", "Two", "", "Eight"});
    list.Add(new List<string> {"Three", "Five", "Six"});
    list.Add(new List<string> {"Sixteen", "", ""});
    list.Add(new List<string> {"Twenty-Eight", "Forty", "Nine"});

    //Create an empty List of a List
    List<List<string>> newList = new List<List<string>>();

    //Loop through the original list and purge each list of empty strings
    for(int i = 0; i < list.Count; i++) {
        newList.Add(list[i].Where(x => !string.IsNullOrEmpty(x)).ToList());
    }

    foreach (var s in newList) {
        Console.WriteLine(string.Join(", ", s));    
    }

    /*
    CORRECT OUTPUT:
        "One", "Two", "Eight"
        "Three", "Five", "Six"
        "Sixteen"
        "Twenty-Eight", "Forty", "Nine"         
    */      
}

Ответы [ 4 ]

0 голосов
/ 22 октября 2018

Почему бы не использовать метод List .RemoveAll () ?Определение:

Удаляет все элементы, которые соответствуют условиям, определенным указанным предикатом.

foreach (var l in list)
{
    l.RemoveAll(x => string.IsNullOrEmpty(x));
}

Это все, что вам нужно.Другой ответ имеет Select().Where() и дважды ToList(), что слишком много для простого действия, подобного этому.

0 голосов
/ 22 октября 2018
newList = list.Select(t=>t.Where(q=>!string.IsNullOrEmpty(q)).ToList()).ToList();
0 голосов
/ 22 октября 2018

Основная идея: перебирать списки и удалять пустые строки из каждого.

list.Select(outerListItem => outerListItem.Where(innerListItem => !string.IsNullOrEmpty(innerListItem).ToList())

0 голосов
/ 22 октября 2018

Так как вы хотите вернуть List<List<string>>, просто Select и отфильтруйте внутренний список с помощью Where

public List<List<string>> FilterStrings()
{
    List<List<string>> list = new List<List<string>>();
    list.Add(new List<string> { "One", "Two", "", "Eight" });
    list.Add(new List<string> { "Three", "Five", "Six" });
    list.Add(new List<string> { "Sixteen", "", "" });
    list.Add(new List<string> { "Twenty-Eight", "Forty", "Nine" });

    return list.Select(lst => lst.Where(str => !string.IsNullOrEmpty(str)).ToList()).ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...