1

私は以下にリストされているように4つの文字列を持っています。文字の順序やコンマ後の間隔は異なりますが、。があると見なされます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. 順序を無視して、2つのList<T>オブジェクトが等しいかどうかを比較します
  3. IEnumerable <T> .Select()が2つのケースのうちの1つで機能するのはなぜですか?使用法から推測することはできません
  4. 一致する2つのコンマ区切りの文字列を比較するための最短のコードは何ですか?
  5. c#とlinqを使用して、分離された文字列を階層に分割します
  6. LINQを使用して2つの文字列間で一致する文字をカウントします
  7. Usinq Linqを使用して、セミコロンで区切られた文字列内のアイテムを選択しますか?
  8. いくつかのプロパティに従って、リスト内の2つ以上のオブジェクトが等しいかどうかを判別します
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 に答える