sudhakarthikeyan Ответов: 2

Я пытался, но код не работает, чтобы удалить дубликаты


Чтобы удалить дубликаты значений в списке я использовал distinct но он не работает

ID имя вопросы

1 OLAM "Produto prefer":"Algodão","Plantou algodão":"Sim"
2 OLAM "Produto prefer:"Feijão Buer","Plantou algodão":"Não"
3 OLAM "Produto prefer":"Buer","Plantou algodão":"Jao"


Мой код выглядит следующим образом
              int columnindex = 43;
              foreach (DataRow row in dtFarmerFarmReports.Rows)
                                {
var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(row["farm_detailsdata"].ToString());
                                     string str = string.Empty;

                                     List<string> lst = new List<string>();
                                     lst.AddRange(dict.Keys);
                                     var distinctList = lst.Distinct().ToList();

                                     foreach (var data in distinctList)
                                     {
                                         columnindex++;
                            worksheet.Cells[2, columnindex].Value = data;
                                     }
                                 }


Когда я запускаю приведенный выше вывод кода, я получаю следующее

Produto предпочитают Plantou algodão Produto предпочитают Plantou algodão Produto предпочитают Plantou algodão

Но я хочу, чтобы результат был следующим

Produto предпочитает Plantou algodão

я хочу удалить дубликаты.

для этого я написал приведенный выше код, но он не работает.

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

Что я уже пробовал:

Чтобы удалить дубликаты значений в списке я использовал distinct но он не работает

ID имя вопросы

1 OLAM "Produto prefer":"Algodão","Plantou algodão":"Sim"
2 OLAM "Produto prefer:"Feijão Buer","Plantou algodão":"Não"
3 OLAM "Produto prefer":"Buer","Plantou algodão":"Jao"


Мой код выглядит следующим образом

int columnindex = 43;
по каждому элементу (строке datarow в dtFarmerFarmReports.Строк)
{
var dict = JsonConvert.DeserializeObject&ЛТ;словарь&ЛТ;строку, строку&ГТ;>(строка["farm_detailsdata"].Метод toString());
string str = строка.Пустой;

List<string> lst = новый список<string>();
lst.AddRange(дикт.Ключи);
var distinctList = lst.Distinct().Список();

данные по каждому элементу (ВАР в distinctList)
{
columnindex++;
рабочий лист.Ячейки[2, columnindex].Value = data;
}
}

Когда я запускаю приведенный выше вывод кода, я получаю следующее

Produto предпочитают Plantou algodão Produto предпочитают Plantou algodão Produto предпочитают Plantou algodão

Но я хочу, чтобы результат был следующим

Produto предпочитает Plantou algodão

я хочу удалить дубликаты.

для этого я написал приведенный выше код, но он не работает.

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

2 Ответов

Рейтинг:
2

OriginalGriff

Проблема в том, что вы делаете все это не в том месте.
Вы читаете свои строки текста, затем обрабатываете каждую строку как JSON - и каждая строка представляет собой отдельный словарь, - из которого затем удаляете дубликаты ключей и добавляете их в список и рабочий лист.
Проблема в том, что словарь не может иметь повторяющихся ключей: каждое значение ключа должно быть уникальным. Но каждая отдельная строка - это отдельный словарь, и нет никаких ограничений, которые мешали бы использовать один и тот же ключ в двух разных словарях.

Читайте ваши строки, обрабатывайте каждый JSON. Добавьте все ключи (не беспокоясь о дубликатах) в один список, и после того, как вы обработали все строки, удалите дубликаты, а затем добавьте все остальное на свой рабочий лист.


Рейтинг:
1

Thomas Daniels

Ты звонишь Distinct- но вы называете это так внутри твой foreach цикл, таким образом, вы печатаете два ключа для каждой строки.

Поскольку вы этого не хотите, вы хотите, чтобы ваш отдельный вызов и код, связанный с рабочим листом, были вне вашего рабочего листа. foreach:

int columnindex = 43;

List<string> lst = new List<string>(); // declare "lst" here

foreach (DataRow row in dtFarmerFarmReports.Rows)
{
    var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(row["farm_detailsdata"].ToString());
    string str = string.Empty;
    lst.AddRange(dict.Keys); // add the keys inside your foreach
}

var distinctList = lst.Distinct().ToList(); // perform the Distinct outside the foreach

foreach (var data in distinctList)
{
    columnindex++;
    worksheet.Cells[2, columnindex].Value = data;
}