【问题标题】:Is it possible to compare "North, South, East" and "North, East, South" and find equivalence?是否可以比较“北、南、东”和“北、东、南”并找到等价物?
【发布时间】:2015-04-19 12:04:27
【问题描述】:

是否可以比较两个字符串如:

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

并根据以下事实找到等价物

both contain "North"

both contain "South"

另一个例子

"North" == "North, South"

还有

"North" != "South"

很明显,逗号分隔关键字符串以进行比较。不确定 C# 中是否有可以帮助解决此问题的关键函数? “包含”将不起作用,因为分隔值的顺序可能不同,即

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

对此的任何帮助将不胜感激。寻找一些专家 C# 指导!

【问题讨论】:

  • 拆分字符串并比较它们。
  • 使用 .Split(",".ToCharArray()) 将字符串拆分为数组,然后使用 Intersection 查看两者中存在的内容。
  • 感谢您的回复。这是因为“北,南”包含“北”
  • 是的,有可能:)
  • 请提出这个问题以使其更清楚。随着您的职业发展,能够明确要求变得越来越重要。

标签: c# c#-4.0 c#-5.0


【解决方案1】:

使用String.SplitString 中获取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();

【讨论】:

  • 你注意到 OP 说 "North == "North, South" 了吗?不知道为什么。
  • @SriramSakthivel,因为“北,南”包含“北”。类似地,“South, North”==“North, East”出于同样的原因,但不能使用“contains”来测试这种等价性。
  • @SamJolly 那么如果其中任何一个匹配,您需要返回 true?
  • @SriramSakthivel:我认为这只是意味着单个字符串North 也与"North, South" 相交。这就是String.Split 的工作原理。即使是单个字符串也会使用该单个字符串创建 String[]
【解决方案2】:

你可以用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
}

【讨论】:

  • 这很有趣,因为值是通过 LINQ 从数据库中产生的。
【解决方案3】:

你的意思是这样的吗,打印“Strings in common: South, East”

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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 2020-08-29
    相关资源
    最近更新 更多