У меня есть два списка строк, и я хочу извлечь из каждого списка индекс, если строка с текущим индексом находится во втором списке (и наоборот), строка не может точно соответствовать или может быть сокращением другого списканапример, рассмотрим этот два списка
List<string> aList = new List<string> { "Id", "PartCode", "PartName", "EquipType" };
List<string> bList = new List<string> { "PartCode", "PartName", "PartShortName", "EquipmentType" };
в приведенном выше примере, я хочу от aList
индексов: 1,2,3
и от bList
индексов 0,1,3
индексы 1,2 из aList
, очевидно, что строка соответствует полностью, но интересной частью являются "EquipType" и "EquipmentType" , которые match , потому что "EquipType" является сокращением "EquipmentType"
, но "PartName" равно несокращение из "PartShortName" , поэтому там индексы не нужны
это мой код
List<string> aList = new List<string> { "Id", "PartCode", "PartName", "EquipType" };// 1, 2 , 3
List<string> bList = new List<string> { "PartCode", "PartName", "PartShortName", "EquipmentType" };//0, 1 ,3
List<int> alistIndex = new List<int>();
List<int> blistIndex = new List<int>();
for (int i = 0; i < aList.Count; i++)
{
string a = aList[i];
for (int j = 0; j < bList.Count(); j++)
{
string b = bList[j];
string bigger, smaller;
int biggerCount, smallerCount;
if (a.Length > b.Length)
{
bigger = a; smaller = b;
biggerCount = a.Length ; smallerCount = b.Length ;
}
else
{
bigger = b; smaller = a;
biggerCount = b.Length; smallerCount = a.Length ;
}
int countCheck = 0;
for (int k = 0; k < biggerCount; k++)
{
if (smaller.Length != countCheck)
{
if (bigger[k] == smaller[countCheck])
countCheck++;
}
}
if (countCheck == smaller.Length)
{
alistIndex.Add(i);
blistIndex.Add(j);
res = true;
break;
}
else
res = false;
}
}
alistIndex.ForEach(i => Console.Write(i));
Console.WriteLine(Environment.NewLine);
blistIndex.ForEach(i => Console.Write(i));
Console.ReadKey();
приведенный выше код работает очень хорошо и выглядит очень похожек этому решению
, но если изменить порядок второго списка следующим образом:
List<string> bList = new List<string> { "PartCode", "PartShortName", "PartName", "EquipmentType" };
я получуИндекс 0, 1 и 3 (но я хочу 0 2 и 3)
Должен ли я проверить расстояние для каждой пары и вернуть наименьшее?или я должен работать другим методом
Спасибо
PS Я также нашел этот GitHub, но я не знаю, будет ли это для меня хитростью