2015-02-18 3 views
0

Можно ли сравнить две строки, такие как:Можно ли сравнить «Север, Юг, Восток» и «Север, Восток, Юг» и найти эквивалентность?

"North, South, East" == "North, East, South" 

и найти эквивалентности, на основании того, что

both contain "North" 

или

both contain "South" 

Другой пример

"North" == "North, South" 

Также

"North" != "South" 

Очевидно запятая отделяет ключевые строки для сравнения. Не уверен, есть ли ключевая функция в C#, которая может помочь с этим? «Содержит» не будет работать, так как порядка разделителями значений может быть различным, т.е.

"North, South" == "South, North" 

Любая помощь с этим будет с благодарностью принято. Ищите какое-нибудь экспертное руководство C#!

+1

Разделить струны и сравнить каждый из них. –

+1

Разделите строки на массивы с помощью .Split (",". ToCharArray()), а затем используйте Intersection, чтобы увидеть, что существует в обоих. – dbugger

+0

Спасибо, что ответили. Это потому, что «Север, Юг» содержит «Север» – SamJolly

ответ

1

String.Split использования, чтобы получить string[] от String, где каждого маркер отделен разделителем, например, запятой:

var tokens1 = "North, South, East".Split(',').Select(s => s.Trim()); 
var tokens2 = "North, East, South".Split(',').Select(s => s.Trim()); 

я использовал Enumerable.Select для удаления переднего или заднего пространства с String.Trim. Теперь вы можете использовать Intersect + Any, чтобы проверить, есть ли общее пересечение:

bool anyIntersection = tokens1.Intersect(tokens2).Any(); 
+0

Вы отметили, что OP говорит «Север» - «Север, Юг»? Не знаю, почему. –

+0

@SriramSakthivel, потому что «Север, Юг» содержит «Север». Аналогично «Юг, Север» == «Север, Восток» «по той же причине, но нельзя было использовать« содержит »для проверки этой эквивалентности. – SamJolly

+0

@SamJolly Итак, если какое-либо из этих совпадений вам нужно вернуть true? –

1

Вы можете написать его с помощью Any() таким образом:

string NEWS = "North, South, East"; 
string NEW = "North, East, South"; 

var temp1 = NEWS.Split(','); 
var temp2 = NEW.Split(','); 

if (temp1.Any(x => temp2.Contains(x))) 
{ 
// means equal 
} 
+0

Это интересно, поскольку значение происходит из базы данных через LINQ. – SamJolly

1

ли вы имеете в виду что-то вроде этого, который печатает «Струны в общий: Юг, Восток "

string s1 = "North, South, East"; 
string s2 = "East, West, South"; 

var strings1 = s1.Split(',').Select(s => s.Trim()); 
var strings2 = s2.Split(',').Select(s => s.Trim()); 

var stringsInCommon = strings1.Intersect(strings2); 

Console.WriteLine("Strings in common: " + string.Join(", ", stringsInCommon)); 
+0

Огромное спасибо за это. – SamJolly

Смежные вопросы