0

複数の文字列を比較しtrueて、すべて等しい場合に返すことができるようにしたいと思います。いずれかの文字列が「N/A」に等しい場合、それらは比較で無視されます。例えば:

string1 = "hi";
string2 = "hi";
string3 = "hi";
string4 = "N/A";

戻りtrueますが:

string1 = "hi";
string2 = "hey";
string3 = "hi";
string4 = "hi";

を返しfalseます。

ご協力いただきありがとうございます。

4

3 に答える 3

6
if (myStrings.Where(s => s != "N/A").Distinct().Count() > 1)
于 2012-12-03T23:05:58.707 に答える
3

文字列を配列やリストなどのコレクションに格納していると仮定すると、次を使用できますEnumerable.All

string first = strings.FirstOrDefault(s => s != "N/A");
bool allEqual = first == null ||  strings.All(s => s == "N/A" || s == first);

説明:すべての文字列を選択した文字列の1つと比較できます(最初の文字列を選択します)。異なる文字列はallEqualfalseである必要があります。FirstOrDefaultすべての文字列が「N/A」であるか、リストが空である可能性があるため、使用する必要があります。そうするとFirst、例外がスローされます。

デモ

于 2012-12-03T23:08:00.803 に答える
0

質問はすでに回答されていますが、これを行うための最も明白なコードを述べることにしました。

bool notEqual = false;
for (int i = 0; i < list.Count - 1; i++) {
   for (int j = i + 1; j < list.Count; j++) {
      if (!(list[i].Equals(list[j])) {
         notEqual = true;
         break;
      }
   }
}

アイデアはかなり単純です。最初の要素で、次の(長さ-1)要素を確認する必要があります。ただし、2番目の要素では、すでに最初の要素と比較しているため、次の(長さ-2)要素を確認します。長さ-1で終了します。これは、その時点で、最後から2番目の要素と最後の要素を比較するためです。これが最後の可能な比較です。

どうしても、上記の答えははるかに簡潔/エレガントです。これは、C#に関して最も基本的なレベルで実際に何が起こっているかを示すためだけのものです。

于 2012-12-03T23:47:07.767 に答える