Sudheer Kumar Tiwari Ответов: 1

Не удалось найти лучшее совпадение между list<string> и list<tuple<int, string, list<string>> С помощью кода C#


Всем привет,

я застрял в сценарии, у меня есть два списка A & B. Первый список-строка (A)
List<string> а второй список-это (Б) List<Tuple<int, string, List<string>>>
.

Я хочу лучшего соответствия списка а в списке Б.

Пример кода:
// List A
                  List<string> lstA = new List<string>();
                  lstA.Add("aaa");
                  lstA.Add("aaaaaa");
                  lstA.Add("bb");
                  lstA.Add("cc");

                  // List B
                  List<Tuple<int, string, List<string>>> lstB = new List<Tuple<int, string, List<string>>>();
                  List<string> lstB1 = new List<string>();
                  List<string> lstB2 = new List<string>();
                  List<string> lstB3 = new List<string>();
                  List<string> lstB4 = new List<string>();
                  List<string> lstB5 = new List<string>();
                  foreach (var md in item.mylList)
                  {

                      lstB1.Add("aaa");

                        lstB2.Add("aaa");
                        lstB2.Add("a1");

                        lstB3.Add("aaa");
                        lstB3.Add("aaaaaa");
                        lstB3.Add("bb");
                        lstB3.Add("cc");

                        lstB4.Add("aaa");
                        lstB4.Add("cc");

                        lstB5.Add("aaa");
                        lstB5.Add("bb");
                        lstB5.Add("cc");                  }
                  lstB.Add(new Tuple<int, string, List<string>>(1, "Test1", lstB1));
                  lstB.Add(new Tuple<int, string, List<string>>(2, "Test2", lstB2));
                  lstB.Add(new Tuple<int, string, List<string>>(3, "Test3", lstB3));
                  lstB.Add(new Tuple<int, string, List<string>>(4, "Test4", lstB4));
                  lstB.Add(new Tuple<int, string, List<string>>(5, "Test5", lstB5));


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

перепробовал все возможные подходы с использованием Linq и лямбда-выражения, а также попробовал функцию list match и exist в C#

Richard MacCutchan

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

Sudheer Kumar Tiwari

Привет друг, мой первый подход состоял в том, чтобы пересечь список списка B. другой я попытался преобразовать список a, похожий на список B. Но все же я не могу найти правильное совпадение

Patrice T

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

Sudheer Kumar Tiwari

Спасибо, друг. Я перепробовал все возможные сценарии. Можете ли вы помочь здесь просто пропинговать мне строки кода для лучшего соответствия списка а в списке Б

Patrice T

на этом форуме мы поможем вам исправить ваш код, но вы должны показать этот код.

Sudheer Kumar Tiwari

Я уже опубликовал код списка А и списка Б. Что бы я ни пробовал, это мой RnD. U может использовать список A & B для решения с образцовыми данными.

Patrice T

ТА ЧАСТЬ, КОТОРАЯ ПЫТАЕТСЯ РЕШИТЬ ПРОБЛЕМУ !

Richard MacCutchan

Извините, но это не говорит нам ничего полезного. Пожалуйста, прочтите мой комментарий еще раз и предоставьте запрошенную информацию.

Sudheer Kumar Tiwari

Спасибо, Ричард. Я читал ваш комментарий, что бы я ни пробовал, это был мой RnD. Я попробовал использовать loop,linq,typecasting. Может быть, что бы я ни пробовал, это неправильно. Теперь, пожалуйста, скажите мне правильное решение, если постановка проблемы вам ясна, братан.

Richard MacCutchan

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

1 Ответов

Рейтинг:
0

Maciej Los

Я понятия не имею, что вы подразумеваете под "лучшим совпадением между списком А и списком в", Потому что:
1) Вы не объяснили этого,
2) там есть foreach цикл, который не соответствует остальной части вашего кода, из-за неопределенной переменной item

Независимо от вышесказанного... Если вы хотите получить точные совпадения подсписка на ListB с элементами на ListA- ты можешь сделать что-то подобное:

// List A
List<string> lstA = new List<string>();
lstA.Add("aaa");
lstA.Add("aaaaaa");
lstA.Add("bb");
lstA.Add("cc");

// List B
List<Tuple<int, string, List<string>>> lstB = new List<Tuple<int, string, List<string>>>();
List<string> lstB1 = new List<string>();
List<string> lstB2 = new List<string>();
List<string> lstB3 = new List<string>();
List<string> lstB4 = new List<string>();
List<string> lstB5 = new List<string>();
lstB1.Add("aaa");
lstB2.Add("aaa");
lstB2.Add("a1");
lstB3.Add("aaa");
lstB3.Add("aaaaaa");
lstB3.Add("bb");
lstB3.Add("cc");
lstB4.Add("aaa");
lstB4.Add("cc");
lstB5.Add("aaa");
lstB5.Add("bb");
lstB5.Add("cc");
lstB.Add(new Tuple<int, string, List<string>>(1, "Test1", lstB1));
lstB.Add(new Tuple<int, string, List<string>>(2, "Test2", lstB2));
lstB.Add(new Tuple<int, string, List<string>>(3, "Test3", lstB3));
lstB.Add(new Tuple<int, string, List<string>>(4, "Test4", lstB4));
lstB.Add(new Tuple<int, string, List<string>>(5, "Test5", lstB5));

var exactmatches = lstB.Select(x=>new Tuple<int, string, List<Tuple<string, bool>>>(
		x.Item1,
		x.Item2,
		x.Item3.Select(y=> new Tuple<string, bool>(y, lstA.Any(z=>z==y))).ToList()))
		.ToList();
foreach(var em in exactmatches)
{
	Console.WriteLine("{0} {1}", em.Item1, em.Item2);
	Console.WriteLine("\t\tsubitem1\tIsOnListA");
	foreach(var t in em.Item3)
	{
		Console.WriteLine("\t\t{0}\t{1}", t.Item1, t.Item2);
	}
	Console.WriteLine("{0}", new string('=', 20));
}

Результат:
1 Test1
    subitem1  IsOnListA
    aaa  True
====================
2 Test2
    subitem1  IsOnListA
    aaa  True
    a1  False
====================
3 Test3
    subitem1  IsOnListA
    aaa  True
    aaaaaa  True
    bb  True
    cc  True
====================
4 Test4
    subitem1  IsOnListA
    aaa  True
    cc  True
====================
5 Test5
    subitem1  IsOnListA
    aaa  True
    bb  True
    cc  True
====================



В случае, если вы хотите получить частичное совпадение, вы должны использовать Содержит метод[^].