1

我有四个字符串,如下所示。尽管它们具有不同的字符顺序和逗号后的不同间距——但它们被认为具有same business value.

  1. 如何检查所有字符串是否相同(根据上面解释的业务场景)?我有以下代码,但在逗号后有空格的情况下它会失败。
  2. 有什么比(为此)更好的方法Enumerable.SequenceEqual

注意:“A,B”将被视为与“B,A,B,A,B”相同

注意:我正在Visual Studio 2010使用.Net Framework 4

代码

  string firstString = "A,B,C";
  string secondString = "C,A,B";
  string thirdString = "A,B, C";
  string fourthString = "C, A,B";


  //Set 1 Test
  List<string> firstList = new List<string>(firstString.Split(','));
  List<string> secondLsit = new List<string>(secondString.Split(','));
  bool isStringsSame = Enumerable.SequenceEqual(firstList.OrderBy(t => t), secondLsit.OrderBy(t => t));
  Console.WriteLine(isStringsSame);


  //Set 2 Test
  List<string> thirdList = new List<string>(thirdString.Split(','));
  List<string> fourthList = new List<string>(fourthString.Split(','));
  bool isOtherStringsSame = Enumerable.SequenceEqual(thirdList.OrderBy(t => t), fourthList.OrderBy(t => t));
  Console.WriteLine(isOtherStringsSame);

  Console.ReadLine();

更新

用于OrdianlIgnoreCase忽略大小写敏感性 如何在不区分大小写模式下使用 HashSet<string>.Contains() 方法?

参考

  1. 使用 .NET 检查逗号分隔列表中字符串的最佳方法?
  2. 比较两个 List<T> 对象是否相等,忽略顺序
  3. 为什么 IEnumerable<T>.Select() 在 2 个案例中的 1 个中有效?无法从使用情况推断
  4. 比较两个逗号分隔的字符串以进行匹配的最短代码是什么?
  5. 使用 c# 和 linq 将分隔的字符串拆分为层次结构
  6. 使用 LINQ 计算两个字符串之间的匹配字符
  7. 使用sinq Linq 选择以半逗号分隔的字符串中的项目?
  8. 根据某个属性判断列表中的两个或多个对象是否相等
4

1 回答 1

8

你会认为 A,B 等于 B,A,B,A,B 吗?如果是这样,您应该使用集合。如果不是,则有序序列是合适的。

编辑:现在我们知道您实际上想要设置平等:

var set1 = new HashSet<string>(firstString.Split(',').Select(t => t.Trim()));
bool setsEqual = set1.SetEquals(secondString.Split(',').Select(t => t.Trim()));

如果我们不是在设定平等之后......

要忽略空格,您应该修剪它们。例如:

var firstOrdered = firstString.Split(',')
                              .Select(t => t.Trim())
                              .OrderBy(t => t);
var secondOrdered = secondString.Split(',')
                                .Select(t => t.Trim())
                                .OrderBy(t => t); 
bool stringsAreEqual = firstOrdered.SequenceEqual(secondOrdered);
于 2012-11-29T16:49:55.253 回答