как я разделить массив в c# - PullRequest
2 голосов
/ 03 мая 2020

Я новичок в языке C # и хотел бы узнать, как я могу вырезать или манипулировать данными из массива, сгруппированного в одну строку

данные похожи на

enter image description here.

командная строка для отображения данных

IList<IList<Object>> values = response.Values;

            if (values != null && values.Count > 0)
            {
                foreach (var row in values)
                {        
                    Console.WriteLine(row[0]);
             String str = row[0].ToString().Split(Environment.NewLine,row[0]);
                }
              }

даже с преобразованием объекта в string У меня ошибка в этом преобразовании

РЕДАКТИРОВАТЬ

Мне удалось заставить его удалить все, что я хочу, используя сплит, я думаю, что это уже начало

                    try
                    {
                    String[] str = row[0].ToString().Split(null);
                    Console.WriteLine(str[0]);
                    Console.WriteLine($"{row[0]}");
                    catch (Exception)
                    {

                    }

Я использовал try для предотвращения ошибок

Ответы [ 4 ]

2 голосов
/ 03 мая 2020

Как упоминалось выше, вы можете использовать метод Split для разделения строки. Например, если строковое значение равно "Europe, Asia, Africa":

string stringToSplit = "Europe, Asia, Africa";
string[] arrayOfString = stringToSplit.Split(',');

Эта перегрузка (версия) метода Split принимает один аргумент, и это символ, используемый для разделения строки. Результат будет Europe, Asia и Africa. Однако Asia и Africa будут иметь один пробел (' ') в начале, потому что перед этими словами в stringToSplit есть пробел. Кроме того, вам нужно обрезать элементы arrayOfString, добавив

.Select(s => s.Trim()).ToArray()

Результат будет выглядеть следующим образом:

string stringToSplit = "Europe, Asia, Africa";
string[] arrayOfString = stringToSplit.Split(',').Select(s => s.Trim()).ToArray();

stringToSplit - это строка, которую вы хотите разделить, используя ',' символ. Split(',') - это метод, который разбивает строку, используя символ ',', и результатом этого метода является массив string -s. Select(s => s.Trim()) берет каждый элемент этого массива и обрезает его (удаляет все пустые места с начала и с конца), и в результате получается список строк. s это просто псевдоним элемента, вы можете назвать его как хотите. ToArray - это метод, который преобразует, в данном случае список, возвращаемый Select(s => s.Trim()), в массив. Наконец, результат, хранящийся в arrayOfString, представляет собой массив, содержащий обрезанные строки.

Имея в виду полученный вами результат, в вашем примере

IList<IList<Object>> values = response.Values;

if (values != null && values.Count > 0)
{
    foreach (var row in values)
    {        
        Console.WriteLine(row[0]);
    }
}

values представляет собой список списков. Другими словами, каждый элемент values (названный row в примере) является списком. После того, как вы проверите, существует ли values (values != null) и есть ли элементы (values.Count > 0), вы go проходите через каждый элемент (row) values. Эти элементы являются списками (IList<Object>), и вы пишете первый элемент каждого row, используя row[0].

Определение IList<IList<Object>> values говорит, что row имеет тип IList<Object>, что означает что каждый элемент row имеет тип Object. Метод WriteLine имеет перегрузку (версию), которая принимает аргумент типа Object, как и в этом случае. Затем этот аргумент неявно (в фоновом режиме) преобразуется в тип string.

. Если посмотреть на вывод, нет никаких сомнений в том, что эти элементы типа Object на самом деле являются строками, в противном случае будет записано имя типа, или некоторые другие данные бесполезны, или не читаются.

Есть две возможности.

Любой список values содержит один элемент (один список объектов, row) и первый элемент row - это строка (она определенно имеет тип string), которая содержит все эти имена, разделенные Environment.NewLine, или список values содержит несколько элементов (списки объектов, row -s) и первый элемент каждого row - это строка, содержащая одно имя.

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

row[0].ToString().Split('\n')

Однако, похоже, что в другом случае, когда есть несколько списков объектов, и первым является имя. В этом случае вам не нужно ничего разбивать.

2 голосов
/ 03 мая 2020

Сначала преобразуйте объект в строку с помощью .ToString(), а затем используйте функцию .Split() вместе с Environment.NewLine в качестве токена для разделения.

1 голос
/ 03 мая 2020

Выглядит как одна строка, но с символами новой строки внутри.

Если это так, то вы можете разделить, используя символ новой строки в качестве разделителя.

Например: var individualLines = row[0].Split(new[] { Environment.NewLine });

0 голосов
/ 03 мая 2020

Кроме того, вы можете развернуть список списков, таких как IList<List<object>>, с помощью команды .SelectMany() из System.Linq.

Пример программы ниже:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            IList<IList<object>> values = new List<IList<object>>
            {
                new object[] { "Kassadin" },
                new object[] { "Wukong" },
                new object[] { "Lucian-" },
                new object[] { "Akali" },
                new object[] { "Brand-" },
                new object[] { "Kassadin" },
                new object[] { "Kassadin" },
            };

            var list = values.SelectMany((row) => row).Select((item) => item.ToString());
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
        }
    }
}

с ожидаемым вывод:

Kassadin
Wukong
Lucian-
Akali
Brand-
Kassadin
Kassadin
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...