Элементы массива пустые, кроме первого - PullRequest
1 голос
/ 14 марта 2020

Я хочу проверить элементы в массиве. Если все элементы, кроме первого, пусты, распечатайте массив.

Я использую linq "Являются ли все элементы пустой функцией". Я не уверен, что это правильный синтаксис.

bool a = items.All(element => element == "");

Вот мой код, он не перехватывает строку 4, которая является целевой строкой для идентификации закомментированных строк.

    private void CheckForQualifyArray(string line)
    {
        // "COMBINED ACCUMULATED TOTALS","","","","","","FINAL RESULTS",
        // "Primary Election","","","","","61 Of 61 Vote Centers Reporting","",
        // "March 3, 2020","","","","","","Collin County",
        // "1","","","","","","",
        // "STATISTICS","","","","","","",
        // "","TOTAL","Election Day","Early Voting","Mail","","",

        string[] input = line.Split(',');
        int arraySize = input.Length - 1;
        string[] items = new string[arraySize];

        items[0] = input[1].ToString();
        items[1] = input[2].ToString();
        items[2] = input[3].ToString();
        items[3] = input[4].ToString();
        items[4] = input[5].ToString();
        items[5] = input[6].ToString();
        items[6] = input[7].ToString();


        // Are all elements Empty
        bool a = items.All(element => element == "");

        if (a)
        {
            Debug.WriteLine(line);

        }

    }

Ответы [ 2 ]

3 голосов
/ 14 марта 2020

Вам не нужно создавать новый массив, просто используйте метод Skip, чтобы опустить первый элемент из массива line элементов, а затем используйте All , Вызов ToString() также избыточен в вашем коде, потому что input уже является массивом строк

Вы также можете использовать метод IsNullOrEmpty, чтобы проверить, что строка пуста вместо сравнения с пустой строкой

string[] input = line.Split(',');

// Are all elements Empty
bool a = input.Skip(1).All(element => string.IsNullOrEmpty(element));

Если сами кавычки представляют часть строки (кажется, что так), то предикат метода All должен заботиться о кавычках (не пустой строке)

bool a = input.Skip(1).All(element => element == @"""");
2 голосов
/ 14 марта 2020

Вы можете использовать Linq следующим образом:

var input = line.Split(',').ToList();
if(input.Skip(1).All(x=>x.Equals("\"\""))) // Condition based on note below
{
     Debug.WriteLine(line);
}

Enumerable.Skip позволяет пропустить / пропустить необходимое количество элементов и вернуть оставшиеся элементы. Затем вы можете использовать Enumerable.All для проверки требуемого условия.

Примечание. На основе образцов в OP

На основе строк образцов, приведенных в вопрос, неясно, хотите ли вы проверить, является ли строка Empty или "" (кавычки являются частью строки).

Если вы хотите проверить на String.Empty, вы можете изменить условие выше как

if(input.Skip(1).All(x=>string.IsNullOrEmpty(x)))
{
     Debug.WriteLine(line);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...