Я реализовал код на C#, который сравнивает 2 символа строки по символу и возвращает процентное различие между двумя строками. Ниже приведен код.Сравнение строк в списке ссылочных типов
public static double percentage(string a, string b)
{
double percent;
if (a == b) //Same string, no iteration needed.
percent = 100;
if ((a.Length == 0) || (b.Length == 0)) //One is empty, second is not
{
percent = 0;
}
double maxLen = a.Length > b.Length ? a.Length : b.Length;
int minLen = a.Length < b.Length ? a.Length : b.Length;
int sameCharAtIndex = 0;
for (int i = 0; i < minLen; i++) //Compare char by char
{
if (a[i] == b[i])
{
sameCharAtIndex++;
}
}
percent = sameCharAtIndex/maxLen * 100;
Console.WriteLine("Difference {0}", percent.ToString());
return percent;
}
У меня есть неправдоподобные данные из 2 таблицы в моей базе данных и хранятся данные в 2 списках ниже
//ListOfPerson
while (reader.Read())
{
//var person = new Person();
person.ID = Convert.ToInt32(reader["ID"]);
person.firstName = reader["FirstName"].ToString();
person.middleName = reader["MiddleName"].ToString();
person.lastName = reader["LastName"].ToString();
ListOfPerson.Add(person);
Console.WriteLine("{0} {1} {2} {3}", person.ID, person.firstName, person.middleName, person.lastName);
}
//ListOfEmployee
while (reader1.Read())
{
//var employee = new Employee();
employee.firstName = reader1["FirstName"].ToString();
employee.lastName = reader1["LastName"].ToString();
ListOfEmployee.Add(employee);
Console.WriteLine("{0} {1}", employee.firstName, employee.lastName);
}
Я хочу сравнить person.firstName (во всем ListOfPerson) и employee.firstName (во всем ListOfEmployee) по характеру и получить процент. Я попытался сделать это:
foreach (var p in ListOfPerson)
{
for (int i = 0; i < ListOfEmployee.Count(); i++)
{
clsCompare.percentage(p.firstName, ListOfEmployee[i].firstName);
}
}
но его зацикливание только через фамилии в ListOfPerson и ListOfEmployee. Как я могу достичь этого? прокручивая все имена, сравнивая символ по символу в 2 списках.
Уверены ли вы? Вы пробовали переходить с помощью контрольных точек или записывать имена тоже? Код, который у вас есть, должен проходить через все – Sayse
Пока он должен перебираться, как вы записываете возвращаемое значение 'clsCompare.percentage (...)' ? –
Почему 'var person = new Person();' прокомментировал? Без 'new Person()' вы просто составляете список, содержащий одно и то же лицо. Вот почему вы получаете только последнего человека. – bokibeg